// // traits.h // serializer // // Created by Sam Jaffe on 3/15/23. // #pragma once namespace serializer::detail { template struct always_false : std::false_type {}; // Don't capture Aggregate objects lol... template struct is_tuple : std::false_type {}; template struct is_tuple> : std::true_type {}; template struct is_tuple> : std::true_type {}; template struct is_tuple> : std::true_type {}; template struct is_container : std::false_type {}; template struct is_container> : std::true_type {}; template struct is_associative_container : std::false_type {}; template struct is_associative_container> : std::true_type {}; template struct has_serial_type : std::false_type {}; template struct has_serial_type> : std::true_type {}; template struct is_dereferencable : std::false_type {}; template struct is_dereferencable>> : std::true_type {}; template constexpr bool is_tuple_v = is_tuple{}; template constexpr bool is_container_v = is_container{}; template constexpr bool is_associative_container_v = is_container_v && is_associative_container{}; template constexpr bool has_serial_type_v = has_serial_type{}; template constexpr bool is_dereferencable_v = is_dereferencable{}; }