#ifndef ASYNC_MQTT5_TRAITS_HPP #define ASYNC_MQTT5_TRAITS_HPP #include #include #include namespace async_mqtt5 { template constexpr bool is_optional_impl = false; template constexpr bool is_optional_impl> = true; template constexpr bool is_optional = is_optional_impl>; template class> constexpr bool is_specialization = false; template class T, class... Args> constexpr bool is_specialization, T> = true; template concept is_vector = is_specialization, std::vector>; template concept is_boost_iterator = is_specialization< std::remove_cvref_t, boost::iterator_range >; } // end namespace async_mqtt5 #endif // !ASYNC_MQTT5_TRAITS_HPP