From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7934) id B0CBF385842D; Sat, 8 Jul 2023 05:07:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B0CBF385842D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1688792845; bh=EiCJu47I7yMtiUH9tptZcuWNg+NEa4vhR7SzfFkhFXE=; h=From:To:Subject:Date:From; b=pUf+zkHA7NQLhqT0frAMswAeHgg2yP0w4+ilhOv6JxmgCyvSHW3yX+gyERXIzICS/ CJgaGd/7oTQZX9o/06cOWf5MrO07F5/rIfyNj6lFhWnG6AZZb8yJ/pkVMP3nKp33Nq 0yC0mguOoqYkNGNtW+JrWimDrIYMSstjXakX9wk0= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Ken Matsui To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc(refs/users/kmatsui/heads/is_object)] libstdc++: use new built-in trait __is_reference for std::is_reference X-Act-Checkin: gcc X-Git-Author: Ken Matsui X-Git-Refname: refs/users/kmatsui/heads/is_object X-Git-Oldrev: a33e69f32e6f950e768f903de69986bd5175040f X-Git-Newrev: 0323195db7017c9960688757e193e114de17bae2 Message-Id: <20230708050725.B0CBF385842D@sourceware.org> Date: Sat, 8 Jul 2023 05:07:25 +0000 (GMT) List-Id: https://gcc.gnu.org/g:0323195db7017c9960688757e193e114de17bae2 commit 0323195db7017c9960688757e193e114de17bae2 Author: Ken Matsui Date: Sat Mar 25 04:23:19 2023 -0700 libstdc++: use new built-in trait __is_reference for std::is_reference This patch gets std::is_reference to dispatch to new built-in trait __is_reference. libstdc++-v3/ChangeLog: * include/std/type_traits (is_reference): Use __is_reference built-in trait. (is_reference_v): Likewise. Signed-off-by: Ken Matsui Diff: --- libstdc++-v3/include/std/type_traits | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 0e7a9c9c7f3..2a14df7e5f9 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -639,6 +639,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Composite type categories. /// is_reference +#if __has_builtin(__is_reference) + template + struct is_reference + : public __bool_constant<__is_reference(_Tp)> + { }; +#else template struct is_reference : public false_type @@ -653,6 +659,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct is_reference<_Tp&&> : public true_type { }; +#endif /// is_arithmetic template @@ -3192,12 +3199,19 @@ template inline constexpr bool is_class_v = __is_class(_Tp); template inline constexpr bool is_function_v = is_function<_Tp>::value; + +#if __has_builtin(__is_reference) +template + inline constexpr bool is_reference_v = __is_reference(_Tp); +#else template inline constexpr bool is_reference_v = false; template inline constexpr bool is_reference_v<_Tp&> = true; template inline constexpr bool is_reference_v<_Tp&&> = true; +#endif + template inline constexpr bool is_arithmetic_v = is_arithmetic<_Tp>::value; template