1 #ifndef CORE_TYPE_TRAITS_HPP 2 #define CORE_TYPE_TRAITS_HPP 20 template <
class T,
class... Ts>
36 template <::std::
size_t I,
class T>
38 template <
class T>
using tuple_size_t = typename ::std::tuple_size<T>::type;
41 template <
bool B>
using bool_constant = ::std::integral_constant<bool, B>;
47 template <
class T,
class... Ts>
49 bool_constant<T::value and conjunction<Ts...>::value>
53 template <
class T,
class... Ts>
55 bool_constant<T::value or disjunction<Ts...>::value>
59 template <
class T,
class... Ts>
61 bool_constant<not T::value and negation<Ts...>::value>
63 template <>
struct negation<> : ::std::false_type { };
72 void operator = (
nonesuch const&) =
delete;
75 template <
class T,
template <
class...>
class U,
class... Args>
78 template <
template <
class...>
class T,
class... Args>
81 template <
class T,
template <
class...>
class U,
class... Args>
84 template <
class To,
template <
class...>
class T,
class... Args>
90 template <
class T,
template <
class...>
class U,
class... Args>
93 template <
class T,
template<
class...>
class U,
class... Args>
94 using is_detected_convertible = ::std::is_convertible<
99 template <
template <
class...>
class T,
class... Args>
114 template <
class T>
using remove_cv_t = typename ::std::remove_cv<T>::type;
118 template <
class T>
using add_const_t = typename ::std::add_const<T>::type;
119 template <
class T>
using add_cv_t = typename ::std::add_cv<T>::type;
133 template <
class T>
using add_pointer_t = typename ::std::add_pointer<T>::type;
137 template <
class T>
using make_signed_t = typename ::std::make_signed<T>::type;
147 ::std::size_t Align =
alignof(typename ::std::aligned_storage<Len>::type)
150 template <::std::size_t Len,
class... Types>
155 template <
bool B,
class T =
void>
158 template <
bool B,
class T,
class F>
164 template <::std::size_t Len,
class... Types>
167 static constexpr ::std::size_t
size () noexcept {
171 static constexpr ::std::size_t alignment_value =
alignof(
184 template <
class... Args>
187 decltype(impl::INVOKE(::std::declval<Args>()...)),
192 template <
class... Args>
struct invoke_of :
196 template <
class F,
class... Args>
204 template <
class T,
class U>
206 decay_t<decltype(true ? ::std::declval<T>() : ::std::declval<U>())>
209 template <
class T,
class U,
class... Ts>
211 typename common_type<
212 typename common_type<T, U>::type,
232 template <
class T,
class U=T>
236 template <
class T,
class U>
238 ::std::is_volatile<T>::value,
243 template <
class T,
class U>
245 ::std::is_const<T>::value,
250 template <
class T,
class U>
252 T, typename transmit_const<T, U>::type
255 template <
class T,
class U>
258 template <
class T,
class U>
261 template <
class T,
class U>
aligned_storage_t<(Len > sizeof(union_type) ? Len :sizeof(union_type)), alignment_value > type
typename ::std::remove_cv< T >::type remove_cv_t
typename ::std::remove_pointer< T >::type remove_pointer_t
typename invoke_of< Args... >::type invoke_of_t
::std::integral_constant< bool, B > bool_constant
typename ::std::add_cv< T >::type add_cv_t
Copyright © 2013 - 2015 MNMLSTC.
typename transmit_const< T, U >::type transmit_const_t
typename ::std::remove_reference< T >::type remove_reference_t
::std::is_convertible< detected_t< T, Args... >, To > is_detected_convertible
typename ::std::add_lvalue_reference< T >::type add_lvalue_reference_t
typename ::std::remove_all_extents< T >::type remove_all_extents_t
typename class_of< T >::type class_of_t
typename ::std::remove_volatile< T >::type remove_volatile_t
typename transmit_cv< T, U >::type transmit_cv_t
typename result_of< T >::type result_of_t
typename ::std::add_volatile< T >::type add_volatile_t
typename detected_or< T, U, Args... >::type detected_or_t
discriminate< Ts... > rest
typename meta::identity< T >::type identity_t
::std::is_same< T, detected_t< U, Args... > > is_detected_same
typename ::std::remove_const< T >::type remove_const_t
typename ::std::make_unsigned< T >::type make_unsigned_t
typename ::std::add_const< T >::type add_const_t
typename ::std::underlying_type< T >::type underlying_type_t
typename ::std::decay< T >::type decay_t
typename ::std::conditional< B, T, F >::type conditional_t
typename aligned_union< Len, Types... >::type aligned_union_t
typename ::std::make_signed< T >::type make_signed_t
typename ::std::add_pointer< T >::type add_pointer_t
typename detected_or< nonesuch, T, Args... >::type detected_t
typename ::std::add_rvalue_reference< T >::type add_rvalue_reference_t
typename common_type< T... >::type common_type_t
impl::class_of_t< T > class_of_t
impl::decay_t< T > decay_t
typename detected_or< nonesuch, T, Args... >::value_t is_detected
typename ::std::enable_if< B, T >::type enable_if_t
meta::deduce< Ts... > void_t
typename ::std::tuple_size< T >::type tuple_size_t
typename ::std::remove_extent< T >::type remove_extent_t
typename transmit_volatile< T, U >::type transmit_volatile_t
typename ::std::tuple_element< I, T >::type tuple_element_t
typename ::std::aligned_storage< Len, Align >::type aligned_storage_t
static constexpr ::std::size_t size() noexcept