diff --git a/libcxx/include/map b/libcxx/include/map --- a/libcxx/include/map +++ b/libcxx/include/map @@ -904,8 +904,8 @@ typedef _Key key_type; typedef _Tp mapped_type; typedef pair value_type; - typedef typename __identity<_Compare>::type key_compare; - typedef typename __identity<_Allocator>::type allocator_type; + typedef __identity_t<_Compare> key_compare; + typedef __identity_t<_Allocator> allocator_type; typedef value_type& reference; typedef const value_type& const_reference; @@ -1674,8 +1674,8 @@ typedef _Key key_type; typedef _Tp mapped_type; typedef pair value_type; - typedef typename __identity<_Compare>::type key_compare; - typedef typename __identity<_Allocator>::type allocator_type; + typedef __identity_t<_Compare> key_compare; + typedef __identity_t<_Allocator> allocator_type; typedef value_type& reference; typedef const value_type& const_reference; diff --git a/libcxx/include/set b/libcxx/include/set --- a/libcxx/include/set +++ b/libcxx/include/set @@ -450,7 +450,7 @@ typedef key_type value_type; typedef _Compare key_compare; typedef key_compare value_compare; - typedef typename __identity<_Allocator>::type allocator_type; + typedef __identity_t<_Allocator> allocator_type; typedef value_type& reference; typedef const value_type& const_reference; @@ -974,11 +974,11 @@ { public: // types: - typedef _Key key_type; + typedef _Key key_type; typedef key_type value_type; - typedef _Compare key_compare; + typedef _Compare key_compare; typedef key_compare value_compare; - typedef typename __identity<_Allocator>::type allocator_type; + typedef __identity_t<_Allocator> allocator_type; typedef value_type& reference; typedef const value_type& const_reference; diff --git a/libcxx/include/type_traits b/libcxx/include/type_traits --- a/libcxx/include/type_traits +++ b/libcxx/include/type_traits @@ -525,6 +525,9 @@ template struct __identity { typedef _Tp type; }; +template +using __identity_t _LIBCPP_NODEBUG_TYPE = typename __identity<_Tp>::type; + template struct _LIBCPP_TEMPLATE_VIS __dependent_type : public _Tp {}; @@ -4022,8 +4025,8 @@ template struct __result_of_mp<_MP, _Tp, true> - : public __identity::_ReturnType> { + using type = typename __member_pointer_traits<_MP>::_ReturnType; }; // member data pointer @@ -4034,13 +4037,13 @@ template struct __result_of_mdp<_Rp _Class::*, _Tp, false> { - typedef typename __apply_cv()), _Rp>::type& type; + using type = typename __apply_cv()), _Rp>::type&; }; template struct __result_of_mdp<_Rp _Class::*, _Tp, true> { - typedef typename __apply_cv<_Tp, _Rp>::type& type; + using type = typename __apply_cv<_Tp, _Rp>::type&; }; template diff --git a/libcxx/include/unordered_map b/libcxx/include/unordered_map --- a/libcxx/include/unordered_map +++ b/libcxx/include/unordered_map @@ -920,9 +920,9 @@ // types typedef _Key key_type; typedef _Tp mapped_type; - typedef typename __identity<_Hash>::type hasher; - typedef typename __identity<_Pred>::type key_equal; - typedef typename __identity<_Alloc>::type allocator_type; + typedef __identity_t<_Hash> hasher; + typedef __identity_t<_Pred> key_equal; + typedef __identity_t<_Alloc> allocator_type; typedef pair value_type; typedef value_type& reference; typedef const value_type& const_reference; @@ -1857,9 +1857,9 @@ // types typedef _Key key_type; typedef _Tp mapped_type; - typedef typename __identity<_Hash>::type hasher; - typedef typename __identity<_Pred>::type key_equal; - typedef typename __identity<_Alloc>::type allocator_type; + typedef __identity_t<_Hash> hasher; + typedef __identity_t<_Pred> key_equal; + typedef __identity_t<_Alloc> allocator_type; typedef pair value_type; typedef value_type& reference; typedef const value_type& const_reference; diff --git a/libcxx/include/unordered_set b/libcxx/include/unordered_set --- a/libcxx/include/unordered_set +++ b/libcxx/include/unordered_set @@ -411,9 +411,9 @@ // types typedef _Value key_type; typedef key_type value_type; - typedef typename __identity<_Hash>::type hasher; - typedef typename __identity<_Pred>::type key_equal; - typedef typename __identity<_Alloc>::type allocator_type; + typedef __identity_t<_Hash> hasher; + typedef __identity_t<_Pred> key_equal; + typedef __identity_t<_Alloc> allocator_type; typedef value_type& reference; typedef const value_type& const_reference; static_assert((is_same::value), @@ -1109,9 +1109,9 @@ // types typedef _Value key_type; typedef key_type value_type; - typedef typename __identity<_Hash>::type hasher; - typedef typename __identity<_Pred>::type key_equal; - typedef typename __identity<_Alloc>::type allocator_type; + typedef __identity_t<_Hash> hasher; + typedef __identity_t<_Pred> key_equal; + typedef __identity_t<_Alloc> allocator_type; typedef value_type& reference; typedef const value_type& const_reference; static_assert((is_same::value),