| 1234567891011121314151617181920212223242526 |
- #pragma once
- namespace cli::detail {
- template <typename T> struct is_string : std::false_type {};
- template <typename T>
- struct is_string<T*> : std::is_same<std::remove_cv_t<T>, char> {};
- template <typename T>
- struct is_string<T[]> : std::is_same<std::remove_cv_t<T>, char> {};
- template <typename...Ts>
- struct is_string<std::basic_string<Ts...>> : std::true_type {};
- template <typename T, typename = void> struct is_container : std::false_type {};
- template <typename T>
- struct is_container<T, std::enable_if_t<!std::is_void_v<typename T::value_type>>> : std::true_type {};
- template <typename T, typename = void> struct is_map_value_type : std::false_type {};
- template <typename K, typename V>
- struct is_map_value_type<std::pair<K const, V>> : std::true_type {};
- template <typename T>
- static constexpr bool const is_string_v = is_string<T>::value;
- template <typename T>
- static constexpr bool const is_container_v = is_container<T>::value;
- template <typename T>
- static constexpr bool const is_map_value_type_v = is_map_value_type<T>::value;
- }
|