Skip to content

Commit

Permalink
fix: build error for more is and as
Browse files Browse the repository at this point in the history
  • Loading branch information
MistEO committed Jan 23, 2024
1 parent cd4a67d commit b0785dd
Showing 1 changed file with 24 additions and 24 deletions.
48 changes: 24 additions & 24 deletions include/json.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,22 @@ namespace utils
using iter_value_t = typename std::iterator_traits<remove_cvref_t<T>>::value_type;
template <typename R>
using range_value_t = iter_value_t<iterator_t<R>>;

template <typename T, typename = void>
constexpr bool is_container = false;
template <typename T>
constexpr bool is_container<T, std::void_t<typename T::value_type, utils::range_value_t<T>>> =
std::is_same_v<typename T::value_type, utils::range_value_t<T>>;

template <typename T, typename = void>
constexpr bool is_map = false;
template <typename T>
constexpr bool is_map<T, std::void_t<typename T::key_type, typename T::mapped_type>> = is_container<T>;

template <typename T, typename = void>
constexpr bool is_collection = false;
template <typename T>
constexpr bool is_collection<T> = is_container<T> && !is_map<T>;
}

// *********************************
Expand Down Expand Up @@ -205,13 +221,13 @@ class basic_value
// deprecated, please use as_collection instead.
vector_t<value_t> to_vector() const
{
return template to_vector<value_t, vector_t>();
return to_vector<value_t, vector_t>();
}
template <typename value_t, template <typename...> typename map_t = std::map>
// deprecated, please use as_map instead.
map_t<string_t, value_t> to_map() const
{
return template as_map<value_t, map_t>();
return as_map<value_t, map_t>();
}

basic_value<string_t>& operator=(const basic_value<string_t>& rhs);
Expand Down Expand Up @@ -254,13 +270,13 @@ class basic_value
explicit operator string_t() const { return as_string(); }

template <typename value_t, template <typename...> typename collection_t = std::vector,
typename _ = std::enable_if_t<_serialization_helper::is_collection<collection_t<value_t>>>>
typename _ = std::enable_if_t<utils::is_collection<collection_t<value_t>>>>
explicit operator collection_t<value_t>() const
{
return as_collection<value_t, collection_t>();
}
template <typename value_t, template <typename...> typename map_t = std::map,
typename _ = std::enable_if_t<_serialization_helper::is_map<map_t<string_t, value_t>>>>
typename _ = std::enable_if_t<utils::is_map<map_t<string_t, value_t>>>>
explicit operator map_t<string_t, value_t>() const
{
return as_map<value_t, map_t>();
Expand Down Expand Up @@ -767,13 +783,13 @@ inline bool basic_value<string_t>::is() const noexcept
else if constexpr (std::is_same_v<basic_array<string_t>, value_t>) {
return is_array();
}
else if constexpr (_serialization_helper::is_collection<value_t>) {
else if constexpr (utils::is_collection<value_t>) {
return is_array() && all<typename value_t::value_type>();
}
else if constexpr (std::is_same_v<basic_object<string_t>, value_t>) {
return is_object();
}
else if constexpr (_serialization_helper::is_map<value_t>) {
else if constexpr (utils::is_map<value_t>) {
return is_object() && std::is_constructible_v<string_t, typename value_t::key_type> &&
all<typename value_t::mapped_type>();
}
Expand Down Expand Up @@ -2619,22 +2635,6 @@ namespace _serialization_helper
static constexpr bool value = decltype(test<T>(0))::value;
};

template <typename T, typename = void>
constexpr bool is_container = false;
template <typename T>
constexpr bool is_container<T, std::void_t<typename T::value_type, utils::range_value_t<T>>> =
std::is_same_v<typename T::value_type, utils::range_value_t<T>>;

template <typename T, typename = void>
constexpr bool is_map = false;
template <typename T>
constexpr bool is_map<T, std::void_t<typename T::key_type, typename T::mapped_type>> = is_container<T>;

template <typename T, typename = void>
constexpr bool is_collection = false;
template <typename T>
constexpr bool is_collection<T> = is_container<T> && !is_map<T>;

template <bool loose, typename string_t>
struct string_converter
{
Expand Down Expand Up @@ -2697,7 +2697,7 @@ basic_value<string_t> serialize(any_t&& arg, string_converter_t&& string_convert
else if constexpr (std::decay_t<string_converter_t>::template is_convertible<any_t>) {
return string_converter(std::forward<any_t>(arg));
}
else if constexpr (is_collection<std::decay_t<any_t>>) {
else if constexpr (utils::is_collection<std::decay_t<any_t>>) {
basic_value<string_t> result;
for (auto&& val : arg) {
using value_t = decltype(val);
Expand All @@ -2707,7 +2707,7 @@ basic_value<string_t> serialize(any_t&& arg, string_converter_t&& string_convert
}
return result;
}
else if constexpr (is_map<std::decay_t<any_t>>) {
else if constexpr (utils::is_map<std::decay_t<any_t>>) {
basic_value<string_t> result;
for (auto&& [key, val] : arg) {
using key_t = decltype(key);
Expand Down

0 comments on commit b0785dd

Please sign in to comment.