| 1234567891011121314151617181920 |
- #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>
- 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;
- }
|