#pragma once #include namespace meta { template typename Template> struct is_template; template typename Template> constexpr auto is_template_v = is_template::value; template struct index_sequence_cat; template using index_sequence_cat_t = typename index_sequence_cat::type; template struct index_sequence_rev; template using index_sequence_rev_t = typename index_sequence_rev::type; template struct is_iterable; template constexpr auto is_iterable_v = is_iterable::value; template struct is_sequential_container; template constexpr auto is_sequential_container_v = is_sequential_container::value; template struct is_associative_container; template constexpr auto is_associative_container_v = is_associative_container::value; template struct is_container; template constexpr auto is_container_v = is_container::value; template struct is_contiguous_container; template constexpr auto is_contiguous_container_v = is_contiguous_container::value; template struct is_macro_enum; template constexpr auto is_macro_enum_v = is_macro_enum::value; template struct is_variant_member; template constexpr auto is_variant_member_v = is_variant_member::value; // true if is integral/floating point, or is convertible to string template struct is_basic_serializable; // true if is integral/floating point, or is convertible to string template constexpr auto is_basic_serializable_v = is_basic_serializable::value; }