refactor is_compatible_string_type

parent e84195ab
......@@ -90,25 +90,23 @@ template <typename BasicJsonType, typename CompatibleObjectType>
struct is_compatible_object_type
: is_compatible_object_type_impl<BasicJsonType, CompatibleObjectType> {};
template<bool B, class RealType, class CompatibleStringType>
template <typename BasicJsonType, typename CompatibleStringType,
typename = void>
struct is_compatible_string_type_impl : std::false_type {};
template<class RealType, class CompatibleStringType>
struct is_compatible_string_type_impl<true, RealType, CompatibleStringType>
template <typename BasicJsonType, typename CompatibleStringType>
struct is_compatible_string_type_impl <
BasicJsonType, CompatibleStringType,
enable_if_t<is_detected_exact<typename BasicJsonType::string_t::value_type,
value_type_t, CompatibleStringType>::value >>
{
static constexpr auto value =
std::is_same<typename RealType::value_type, typename CompatibleStringType::value_type>::value and
std::is_constructible<RealType, CompatibleStringType>::value;
std::is_constructible<typename BasicJsonType::string_t, CompatibleStringType>::value;
};
template<class BasicJsonType, class CompatibleStringType>
template <typename BasicJsonType, typename CompatibleStringType>
struct is_compatible_string_type
{
static auto constexpr value = is_compatible_string_type_impl <
conjunction<negation<std::is_same<void, CompatibleStringType>>,
is_detected<value_type_t, CompatibleStringType>>::value,
typename BasicJsonType::string_t, CompatibleStringType >::value;
};
: is_compatible_string_type_impl<BasicJsonType, CompatibleStringType> {};
template<typename BasicJsonType, typename T>
struct is_basic_json_nested_type
......
......@@ -470,25 +470,23 @@ template <typename BasicJsonType, typename CompatibleObjectType>
struct is_compatible_object_type
: is_compatible_object_type_impl<BasicJsonType, CompatibleObjectType> {};
template<bool B, class RealType, class CompatibleStringType>
template <typename BasicJsonType, typename CompatibleStringType,
typename = void>
struct is_compatible_string_type_impl : std::false_type {};
template<class RealType, class CompatibleStringType>
struct is_compatible_string_type_impl<true, RealType, CompatibleStringType>
template <typename BasicJsonType, typename CompatibleStringType>
struct is_compatible_string_type_impl <
BasicJsonType, CompatibleStringType,
enable_if_t<is_detected_exact<typename BasicJsonType::string_t::value_type,
value_type_t, CompatibleStringType>::value >>
{
static constexpr auto value =
std::is_same<typename RealType::value_type, typename CompatibleStringType::value_type>::value and
std::is_constructible<RealType, CompatibleStringType>::value;
std::is_constructible<typename BasicJsonType::string_t, CompatibleStringType>::value;
};
template<class BasicJsonType, class CompatibleStringType>
template <typename BasicJsonType, typename CompatibleStringType>
struct is_compatible_string_type
{
static auto constexpr value = is_compatible_string_type_impl <
conjunction<negation<std::is_same<void, CompatibleStringType>>,
is_detected<value_type_t, CompatibleStringType>>::value,
typename BasicJsonType::string_t, CompatibleStringType >::value;
};
: is_compatible_string_type_impl<BasicJsonType, CompatibleStringType> {};
template<typename BasicJsonType, typename T>
struct is_basic_json_nested_type
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment