mirror of
https://github.com/KeqingMoe/argparse.git
synced 2025-07-04 15:14:39 +00:00
simplified traits using std::void_t
This commit is contained in:
parent
b025166e4c
commit
69c2cada35
@ -53,34 +53,28 @@ namespace argparse {
|
||||
|
||||
namespace details { // namespace for helper methods
|
||||
|
||||
template <typename... Ts> struct is_container_helper {};
|
||||
|
||||
template <typename T, typename _ = void>
|
||||
template <typename T, typename = void>
|
||||
struct is_container : std::false_type {};
|
||||
|
||||
template <> struct is_container<std::string> : std::false_type {};
|
||||
|
||||
template <typename T>
|
||||
struct is_container<
|
||||
T,
|
||||
std::conditional_t<false,
|
||||
is_container_helper<typename T::value_type,
|
||||
decltype(std::declval<T>().begin()),
|
||||
decltype(std::declval<T>().end()),
|
||||
decltype(std::declval<T>().size())>,
|
||||
void>> : std::true_type {};
|
||||
struct is_container<T, std::void_t<typename T::value_type,
|
||||
decltype(std::declval<T>().begin()),
|
||||
decltype(std::declval<T>().end()),
|
||||
decltype(std::declval<T>().size())>>
|
||||
: std::true_type {};
|
||||
|
||||
template <typename T>
|
||||
static constexpr bool is_container_v = is_container<T>::value;
|
||||
|
||||
template <typename T, typename _ = void>
|
||||
template <typename T, typename = void>
|
||||
struct is_streamable : std::false_type {};
|
||||
|
||||
template <typename T>
|
||||
struct is_streamable<
|
||||
T, std::conditional_t<
|
||||
false, decltype(std::declval<std::ostream>() << std::declval<T>()),
|
||||
void>> : std::true_type {};
|
||||
T, std::void_t<decltype(std::declval<std::ostream>() << std::declval<T>())>>
|
||||
: std::true_type {};
|
||||
|
||||
template <typename T>
|
||||
static constexpr bool is_streamable_v = is_streamable<T>::value;
|
||||
|
Loading…
Reference in New Issue
Block a user