This patch optimizes the compilation performance of std::rank by dispatching to the new __rank built-in trait.
libstdc++-v3/ChangeLog: * include/std/type_traits (rank): Use __rank built-in trait. Signed-off-by: Ken Matsui <kmat...@gcc.gnu.org> --- libstdc++-v3/include/std/type_traits | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 90718d772dd..5d2e6eaa2a2 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -1445,6 +1445,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; /// rank +#if _GLIBCXX_USE_BUILTIN_TRAIT(__rank) + template<typename _Tp> + struct rank + : public integral_constant<std::size_t, __rank(_Tp)> { }; +#else template<typename> struct rank : public integral_constant<std::size_t, 0> { }; @@ -1456,6 +1461,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _Tp> struct rank<_Tp[]> : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { }; +#endif /// extent template<typename, unsigned _Uint = 0> -- 2.43.0