14 #ifndef CORE_INTERNAL_HPP 15 #define CORE_INTERNAL_HPP 26 #include <type_traits> 37 template <
class T,
class Void,
template <
class...>
class,
class...>
39 template <
class T,
template <
class...>
class U,
class... Args>
46 template <
class Signature,
class T>
51 template <
class T>
using decay_t = typename ::std::decay<T>::type;
54 template <
bool B,
class T =
void>
62 template <
class T,
class U>
64 template <
class X,
class Y>
65 static auto test (
void*) noexcept(
true) -> decltype(
66 swap(declval<X&>(), declval<Y&>())
69 template <
class,
class>
70 static void test (...) noexcept(
false);
72 static constexpr
bool value = noexcept(test<T, U>(
nullptr));
76 template <
class T,
class U>
81 bool B=noexcept(
swap(declval<X&>(), declval<Y&>()))
84 template <
class,
class>
85 static void test (...) noexcept(
false);
87 static constexpr
bool value = noexcept(test<T, U>(
nullptr));
90 template <
class,
class,
class=
void>
93 template <
class T,
class U>
98 is_swappable_with<T, U>,
99 is_swappable_with<U, T>
101 > : ::std::true_type { };
103 template <
class T,
class U=T>
105 is_swappable<T, U>::value,
106 is_noexcept_swappable_with<T, U>::value,
107 is_noexcept_swappable_with<U, T>::value
116 return static_cast<T&&
>(t);
121 return static_cast<T&&
>(t);
132 template <
class... Args>
137 template <
class Functor,
class... Args>
139 not ::std::is_member_pointer<decay_t<Functor>>::value,
140 decltype(pass<Functor>(f)(pass<Args>(args)...))
141 > {
return pass<Functor>(f)(pass<Args>(args)...); }
143 template <
class Functor,
class... Args>
145 ::std::is_member_pointer<decay_t<Functor>>::value,
146 decltype(::std::mem_fn(pass<Functor>(f))(pass<Args>(args)...))
147 > { return ::std::mem_fn(pass<Functor>(f))(pass<Args>(args)...); }
150 template <
class... Args>
struct invoke_of<true, Args...> :
Copyright © 2013 - 2015 MNMLSTC.
constexpr undefined(...) noexcept
typename ::std::enable_if< B, T >::type enable_if_t
typename class_of< T >::type class_of_t
typename ::std::decay< T >::type decay_t
constexpr undefined INVOKE(undefined, Args &&...) noexcept
void swap(any &lhs, any &rhs) noexcept
::std::false_type value_t
typename ::std::remove_reference< T >::type remove_reference_t
constexpr T && pass(remove_reference_t< T > &t) noexcept