From f953a9cf235ae782eecd8669e5a86db7deeaa327 Mon Sep 17 00:00:00 2001 From: ToruNiina Date: Sat, 5 May 2018 11:37:18 +0900 Subject: [PATCH] add conjunction, disjunction, negation, index_seq --- toml/traits.hpp | 51 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/toml/traits.hpp b/toml/traits.hpp index f6d5c38..6a347e8 100644 --- a/toml/traits.hpp +++ b/toml/traits.hpp @@ -1,6 +1,8 @@ #ifndef TOML11_TRAITS #define TOML11_TRAITS #include +#include +#include namespace toml { @@ -58,6 +60,55 @@ struct has_resize_method : decltype(has_resize_method_impl::check(nullptr)){} #undef decltype(...) #endif +template struct conjunction : std::true_type{}; +template struct conjunction : T{}; +template +struct conjunction : + std::conditional(T::value), conjunction, T>::type +{}; + +template struct disjunction : std::false_type{}; +template struct disjunction : T {}; +template +struct disjunction : + std::conditional(T::value), T, disjunction>::type +{}; + +template +struct negation : std::integral_constant(T::value)>{}; + +template struct is_std_pair : std::false_type{}; +template +struct is_std_pair> : std::true_type{}; + +template struct is_std_tuple : std::false_type{}; +template +struct is_std_tuple> : std::true_type{}; + +// to use toml::get> in C++11 +template struct index_sequence{}; + +template struct push_back_index_sequence{}; +template +struct push_back_index_sequence, N> +{ + typedef index_sequence type; +}; + +template +struct index_sequence_maker +{ + typedef typename push_back_index_sequence< + typename index_sequence_maker::type, N>::type type; +}; +template<> +struct index_sequence_maker<0> +{ + typedef index_sequence<0> type; +}; +template +using make_index_sequence = typename index_sequence_maker::type; + }// detail }//toml #endif // TOML_TRAITS