From 2274c66e6faaaf29ad693b1ae3e5a7b0228a1950 Mon Sep 17 00:00:00 2001 From: Nikolas Klauser Date: Tue, 25 Jun 2024 16:53:17 +0200 Subject: [PATCH] [libc++] Use _If for conditional_t (#96193) This avoids different instantiations when the if and else types are different, resulting in reduced memory use by the compiler. --- libcxx/include/__type_traits/conditional.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/libcxx/include/__type_traits/conditional.h b/libcxx/include/__type_traits/conditional.h index 5b5445a8374271..7d5849ee824e3f 100644 --- a/libcxx/include/__type_traits/conditional.h +++ b/libcxx/include/__type_traits/conditional.h @@ -44,15 +44,14 @@ struct _LIBCPP_TEMPLATE_VIS conditional { using type _LIBCPP_NODEBUG = _Then; }; +template +using __conditional_t _LIBCPP_NODEBUG = _If<_Bp, _IfRes, _ElseRes>; + #if _LIBCPP_STD_VER >= 14 template -using conditional_t _LIBCPP_NODEBUG = typename conditional<_Bp, _IfRes, _ElseRes>::type; +using conditional_t _LIBCPP_NODEBUG = __conditional_t<_Bp, _IfRes, _ElseRes>; #endif -// Helper so we can use "conditional_t" in all language versions. -template -using __conditional_t _LIBCPP_NODEBUG = typename conditional<_Bp, _If, _Then>::type; - _LIBCPP_END_NAMESPACE_STD #endif // _LIBCPP___TYPE_TRAITS_CONDITIONAL_H