|
@@ -14,6 +14,9 @@ namespace std {
|
|
|
typedef integral_constant<bool, true> true_type;
|
|
typedef integral_constant<bool, true> true_type;
|
|
|
typedef integral_constant<bool, false> false_type;
|
|
typedef integral_constant<bool, false> false_type;
|
|
|
|
|
|
|
|
|
|
+ template<bool B>
|
|
|
|
|
+ using bool_constant = integral_constant<bool, B>;
|
|
|
|
|
+
|
|
|
template<class T, class U>
|
|
template<class T, class U>
|
|
|
struct is_same : std::false_type {};
|
|
struct is_same : std::false_type {};
|
|
|
|
|
|
|
@@ -86,6 +89,9 @@ namespace std {
|
|
|
template<class T, class U>
|
|
template<class T, class U>
|
|
|
struct is_convertible : integral_constant<bool, __is_convertible_to(T, U)> {};
|
|
struct is_convertible : integral_constant<bool, __is_convertible_to(T, U)> {};
|
|
|
|
|
|
|
|
|
|
+ template<class T>
|
|
|
|
|
+ struct is_aggregate;
|
|
|
|
|
+
|
|
|
template<class T> struct add_cv { typedef const volatile T type; };
|
|
template<class T> struct add_cv { typedef const volatile T type; };
|
|
|
template<class T> struct add_const { typedef const T type; };
|
|
template<class T> struct add_const { typedef const T type; };
|
|
|
template<class T> struct add_volatile { typedef volatile T type; };
|
|
template<class T> struct add_volatile { typedef volatile T type; };
|
|
@@ -93,4 +99,17 @@ namespace std {
|
|
|
template<class T> struct add_lvalue_reference { typedef T &type; };
|
|
template<class T> struct add_lvalue_reference { typedef T &type; };
|
|
|
template<class T> struct add_rvalue_reference { typedef T &&type; };
|
|
template<class T> struct add_rvalue_reference { typedef T &&type; };
|
|
|
template<class T> struct add_pointer { typedef T *type; };
|
|
template<class T> struct add_pointer { typedef T *type; };
|
|
|
|
|
+
|
|
|
|
|
+ constexpr bool is_constant_evaluated() noexcept;
|
|
|
|
|
+
|
|
|
|
|
+ template<class T>
|
|
|
|
|
+ struct type_identity {
|
|
|
|
|
+ using type = T;
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ template<class T>
|
|
|
|
|
+ using type_identity_t = typename type_identity<T>::type;
|
|
|
|
|
+
|
|
|
|
|
+ template<class...>
|
|
|
|
|
+ using void_t = void;
|
|
|
}
|
|
}
|