15 #ifndef SHAKA_EMBEDDED_UTIL_TEMPLATES_H_ 16 #define SHAKA_EMBEDDED_UTIL_TEMPLATES_H_ 19 #include <type_traits> 32 template <
typename T,
typename =
void>
37 struct is_v8_type<T, decltype(void(sizeof(T)))> : std::is_base_of<v8::Data, T> {
47 : std::integral_constant<bool, std::is_arithmetic<T>::value &&
48 !std::is_same<T, bool>::value> {};
50 template <
typename A,
typename B>
52 : std::is_same<typename std::decay<A>::type, typename std::decay<B>::type> {
55 template <
bool B,
typename T =
void>
58 template <
typename...>
68 template <
typename Func,
typename =
void>
72 template <
typename Func>
76 template <
typename Ret,
typename... Args>
84 static constexpr
const size_t argument_count =
sizeof...(Args);
87 template <
typename Ret,
typename This,
typename... Args>
95 static constexpr
const size_t argument_count =
sizeof...(Args);
98 template <
typename Ret,
typename This,
typename... Args>
106 static constexpr
const size_t argument_count =
sizeof...(Args);
116 template <
typename Func>
117 struct func_traits : impl::func_traits<typename std::decay<Func>::type> {
121 template <
typename T,
typename =
void>
123 template <
typename T>
130 #endif // SHAKA_EMBEDDED_UTIL_TEMPLATES_H_ decltype(&::operator type
char has_call_operator(...)
typename std::tuple_element< I, argument_types >::type argument_type
std::tuple< Args... > argument_types
typename std::tuple_element< I, argument_types >::type argument_type
typename std::enable_if< B, T >::type enable_if_t
std::tuple< Args... > argument_types
std::tuple< Args... > argument_types
typename std::tuple_element< I, argument_types >::type argument_type