guard instantiation of detail::detector in conversion operator of basic_json
to workaround strange Clang behavior: https://bugs.llvm.org/show_bug.cgi?id=48507
This commit is contained in:
parent
d2852ea0c1
commit
4611528bb8
@ -37,7 +37,7 @@ struct detector<Default, void_t<Op<Args...>>, Op, Args...>
|
|||||||
};
|
};
|
||||||
|
|
||||||
template<template<class...> class Op, class... Args>
|
template<template<class...> class Op, class... Args>
|
||||||
using is_detected = typename detector<nonesuch, void, Op, Args...>::value_t;
|
struct is_detected : detector<nonesuch, void, Op, Args...>::value_t {};
|
||||||
|
|
||||||
template<template<class...> class Op, class... Args>
|
template<template<class...> class Op, class... Args>
|
||||||
using detected_t = typename detector<nonesuch, void, Op, Args...>::type;
|
using detected_t = typename detector<nonesuch, void, Op, Args...>::type;
|
||||||
|
|||||||
@ -3342,15 +3342,18 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
|
|||||||
@since version 1.0.0
|
@since version 1.0.0
|
||||||
*/
|
*/
|
||||||
template < typename ValueType, typename std::enable_if <
|
template < typename ValueType, typename std::enable_if <
|
||||||
!std::is_pointer<ValueType>::value&&
|
detail::conjunction <
|
||||||
!std::is_same<ValueType, detail::json_ref<basic_json>>::value&&
|
std::integral_constant < bool,
|
||||||
!std::is_same<ValueType, typename string_t::value_type>::value&&
|
!std::is_pointer<ValueType>::value&&
|
||||||
!detail::is_basic_json<ValueType>::value
|
!std::is_same<ValueType, detail::json_ref<basic_json>>::value&&
|
||||||
&& !std::is_same<ValueType, std::initializer_list<typename string_t::value_type>>::value
|
!std::is_same<ValueType, typename string_t::value_type>::value&&
|
||||||
|
!detail::is_basic_json<ValueType>::value
|
||||||
|
&& !std::is_same<ValueType, std::initializer_list<typename string_t::value_type>>::value
|
||||||
#if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) && _MSC_VER >= 1910 && _MSC_VER <= 1914))
|
#if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) && _MSC_VER >= 1910 && _MSC_VER <= 1914))
|
||||||
&& !std::is_same<ValueType, typename std::string_view>::value
|
&& !std::is_same<ValueType, typename std::string_view>::value
|
||||||
#endif
|
#endif
|
||||||
&& detail::is_detected<detail::get_template_function, const basic_json_t&, ValueType>::value
|
>,
|
||||||
|
detail::is_detected<detail::get_template_function, const basic_json_t&, ValueType >>::value
|
||||||
, int >::type = 0 >
|
, int >::type = 0 >
|
||||||
JSON_EXPLICIT operator ValueType() const
|
JSON_EXPLICIT operator ValueType() const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -3305,7 +3305,7 @@ struct detector<Default, void_t<Op<Args...>>, Op, Args...>
|
|||||||
};
|
};
|
||||||
|
|
||||||
template<template<class...> class Op, class... Args>
|
template<template<class...> class Op, class... Args>
|
||||||
using is_detected = typename detector<nonesuch, void, Op, Args...>::value_t;
|
struct is_detected : detector<nonesuch, void, Op, Args...>::value_t {};
|
||||||
|
|
||||||
template<template<class...> class Op, class... Args>
|
template<template<class...> class Op, class... Args>
|
||||||
using detected_t = typename detector<nonesuch, void, Op, Args...>::type;
|
using detected_t = typename detector<nonesuch, void, Op, Args...>::type;
|
||||||
@ -20362,15 +20362,18 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
|
|||||||
@since version 1.0.0
|
@since version 1.0.0
|
||||||
*/
|
*/
|
||||||
template < typename ValueType, typename std::enable_if <
|
template < typename ValueType, typename std::enable_if <
|
||||||
!std::is_pointer<ValueType>::value&&
|
detail::conjunction <
|
||||||
!std::is_same<ValueType, detail::json_ref<basic_json>>::value&&
|
std::integral_constant < bool,
|
||||||
!std::is_same<ValueType, typename string_t::value_type>::value&&
|
!std::is_pointer<ValueType>::value&&
|
||||||
!detail::is_basic_json<ValueType>::value
|
!std::is_same<ValueType, detail::json_ref<basic_json>>::value&&
|
||||||
&& !std::is_same<ValueType, std::initializer_list<typename string_t::value_type>>::value
|
!std::is_same<ValueType, typename string_t::value_type>::value&&
|
||||||
|
!detail::is_basic_json<ValueType>::value
|
||||||
|
&& !std::is_same<ValueType, std::initializer_list<typename string_t::value_type>>::value
|
||||||
#if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) && _MSC_VER >= 1910 && _MSC_VER <= 1914))
|
#if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) && _MSC_VER >= 1910 && _MSC_VER <= 1914))
|
||||||
&& !std::is_same<ValueType, typename std::string_view>::value
|
&& !std::is_same<ValueType, typename std::string_view>::value
|
||||||
#endif
|
#endif
|
||||||
&& detail::is_detected<detail::get_template_function, const basic_json_t&, ValueType>::value
|
>,
|
||||||
|
detail::is_detected<detail::get_template_function, const basic_json_t&, ValueType >>::value
|
||||||
, int >::type = 0 >
|
, int >::type = 0 >
|
||||||
JSON_EXPLICIT operator ValueType() const
|
JSON_EXPLICIT operator ValueType() const
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user