https://gcc.gnu.org/g:b38aefbbc90a3334c6c5ba6569816d348a1a0c91
commit r15-1247-gb38aefbbc90a3334c6c5ba6569816d348a1a0c91 Author: Ken Matsui <kmat...@gcc.gnu.org> Date: Mon Sep 11 13:58:35 2023 -0700 libstdc++: Optimize std::is_unbounded_array compilation performance This patch optimizes the compilation performance of std::is_unbounded_array by dispatching to the new __is_unbounded_array built-in trait. libstdc++-v3/ChangeLog: * include/std/type_traits (is_unbounded_array_v): Use __is_unbounded_array built-in trait. Signed-off-by: Ken Matsui <kmat...@gcc.gnu.org> Reviewed-by: Patrick Palka <ppa...@redhat.com> Reviewed-by: Jonathan Wakely <jwak...@redhat.com> Diff: --- libstdc++-v3/include/std/type_traits | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 748fa186881d..efbe273d38a9 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -3682,11 +3682,16 @@ template<typename _Ret, typename _Fn, typename... _Args> /// True for a type that is an array of unknown bound. /// @ingroup variable_templates /// @since C++20 +# if _GLIBCXX_USE_BUILTIN_TRAIT(__is_unbounded_array) + template<typename _Tp> + inline constexpr bool is_unbounded_array_v = __is_unbounded_array(_Tp); +# else template<typename _Tp> inline constexpr bool is_unbounded_array_v = false; template<typename _Tp> inline constexpr bool is_unbounded_array_v<_Tp[]> = true; +# endif /// True for a type that is an array of known bound. /// @since C++20