[PATCH v26 01/13] libstdc++: Optimize std::is_const compilation performance

Jonathan Wakely jwakely@redhat.com
Thu Jun 13 12:46:03 GMT 2024


On 23/05/24 15:15 -0700, Ken Matsui wrote:
>On Thu, May 23, 2024 at 3:15 PM Patrick Palka <ppalka@redhat.com> wrote:
>>
>> On Sat, 11 May 2024, Ken Matsui wrote:
>>
>> > This patch optimizes the compilation performance of std::is_const
>> > by dispatching to the new __is_const built-in trait.
>>
>> This patch series LGTM
>
>Thank you!

Patches 1, 2, 3, 4, 6, 7, 10, 11, 12, and 13 are approved for trunk.

I made some comments for 5 (is_pointer), 8 (add_lvalue_reference) and
9 (add_rvalue_reference).


>>
>> >
>> > libstdc++-v3/ChangeLog:
>> >
>> >       * include/std/type_traits (is_const): Use __is_const built-in
>> >       trait.
>> >       (is_const_v): Likewise.
>> >
>> > Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org>
>> > ---
>> >  libstdc++-v3/include/std/type_traits | 12 ++++++++++++
>> >  1 file changed, 12 insertions(+)
>> >
>> > diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits
>> > index b441bf9908f..8df0cf3ac3b 100644
>> > --- a/libstdc++-v3/include/std/type_traits
>> > +++ b/libstdc++-v3/include/std/type_traits
>> > @@ -835,6 +835,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> >    // Type properties.
>> >
>> >    /// is_const
>> > +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_const)
>> > +  template<typename _Tp>
>> > +    struct is_const
>> > +    : public __bool_constant<__is_const(_Tp)>
>> > +    { };
>> > +#else
>> >    template<typename>
>> >      struct is_const
>> >      : public false_type { };
>> > @@ -842,6 +848,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> >    template<typename _Tp>
>> >      struct is_const<_Tp const>
>> >      : public true_type { };
>> > +#endif
>> >
>> >    /// is_volatile
>> >    template<typename>
>> > @@ -3331,10 +3338,15 @@ template <typename _Tp>
>> >    inline constexpr bool is_member_pointer_v = is_member_pointer<_Tp>::value;
>> >  #endif
>> >
>> > +#if _GLIBCXX_USE_BUILTIN_TRAIT(__is_const)
>> > +template <typename _Tp>
>> > +  inline constexpr bool is_const_v = __is_const(_Tp);
>> > +#else
>> >  template <typename _Tp>
>> >    inline constexpr bool is_const_v = false;
>> >  template <typename _Tp>
>> >    inline constexpr bool is_const_v<const _Tp> = true;
>> > +#endif
>> >
>> >  #if _GLIBCXX_USE_BUILTIN_TRAIT(__is_function)
>> >  template <typename _Tp>
>> > --
>> > 2.44.0
>> >
>> >
>>



More information about the Libstdc++ mailing list