#ifndef CORE_META_HPP #define CORE_META_HPP #include #include #include #include #include namespace core { inline namespace v2 { namespace meta { namespace impl { using false_t = ::std::false_type; using true_t = ::std::true_type; template using integral = ::std::integral_constant; template using boolean = integral; template struct identity { using type = T; }; template struct deducer : identity { }; template using deduce = typename deducer::type; template class Detector, class... Args> struct detect : identity { using value = false_t; }; template class Detector, class... Args> struct detect>, Detector, Args...> : identity> { using value = true_t; }; template struct list { static constexpr ::std::size_t size () noexcept { return sizeof...(Ts); } static constexpr bool empty () noexcept { return size() == 0u; } }; template class> struct convert; template struct rebind; template struct into; template class, class...> struct filter; template class, class...> struct map; template struct join; template