xmemory0 (861B)
1 // -*- c++ -*- 2 #pragma once 3 4 #include <cstdlib> 5 #include <limits> 6 #include <new> 7 #include <xutility> 8 9 #define allocator_traits allocator_traits_base 10 11 #include_next <xmemory0> 12 13 #undef allocator_traits 14 15 namespace std 16 { 17 namespace Detail 18 { 19 template <typename T, typename = void> 20 struct get_is_always_equal : std::is_empty<T> {}; 21 22 template <typename T> 23 struct get_is_always_equal<T, std::void_t<typename T::is_always_equal>> 24 : T::is_always_equal {}; 25 } 26 27 template <typename T> 28 struct allocator_traits : allocator_traits_base<T> 29 { 30 using is_always_equal = typename Detail::get_is_always_equal<T>::type; 31 template <typename U> 32 using rebind_traits = allocator_traits< 33 typename allocator_traits_base<T>::template rebind_alloc<U>>; 34 // is this some kind of msvc extension?? 35 using other = allocator_traits<T>; 36 }; 37 }