From cdcc27c1ca9c485c66ac1914e352c79e5048b6b5 Mon Sep 17 00:00:00 2001 From: Patrick Palka Date: Wed, 7 Sep 2022 10:21:51 -0400 Subject: [PATCH] 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. --- 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 b83e7257a9f3..94e73eafd2fb 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 -- 2.47.2