From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1888) id 956F9384D193; Wed, 7 Sep 2022 14:23:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 956F9384D193 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1662560595; bh=hzI8fYz9MFW9C69VkvGfI1pvqSEpG5VYbZXdqSCVExE=; h=From:To:Subject:Date:From; b=PROvvMBywcFK/wjsrORWF+F5S77RaOwyJ0SRfKuWCHq4p5lPWc8xKuIS/TPWziN+6 IEBx9VqydFUrO+qjjQdeIapI8XgHNKw7ttG5GrYZEny8RSnAoS/adZBqBFn2/XrG8g 0l+VBBQ6KLDXyI3c48e2RygumFcHubRix4YmrBFY= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Patrick Palka To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc r13-2523] libstdc++: Optimize is_reference X-Act-Checkin: gcc X-Git-Author: Patrick Palka X-Git-Refname: refs/heads/master X-Git-Oldrev: 66af6e991bf0daf1c41e46400a8f19e87c358cf2 X-Git-Newrev: cdcc27c1ca9c485c66ac1914e352c79e5048b6b5 Message-Id: <20220907142315.956F9384D193@sourceware.org> Date: Wed, 7 Sep 2022 14:23:15 +0000 (GMT) List-Id: https://gcc.gnu.org/g:cdcc27c1ca9c485c66ac1914e352c79e5048b6b5 commit r13-2523-gcdcc27c1ca9c485c66ac1914e352c79e5048b6b5 Author: Patrick Palka Date: Wed Sep 7 10:21:51 2022 -0400 libstdc++: Optimize is_reference Instead of defining is_reference in terms of is_[lr]value_reference, just define it directly. libstdc++-v3/ChangeLog: * include/std/type_traits (is_reference): Make the primary template derive from false_type. Define two partial specializations that derive from true_type. Diff: --- libstdc++-v3/include/std/type_traits | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index b83e7257a9f..94e73eafd2f 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -611,8 +611,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// is_reference template struct is_reference - : public __or_, - is_rvalue_reference<_Tp>>::type + : public false_type + { }; + + template + struct is_reference<_Tp&> + : public true_type + { }; + + template + struct is_reference<_Tp&&> + : public true_type { }; /// is_arithmetic