mirror of
https://github.com/nlohmann/json
synced 2024-11-27 14:20:07 +00:00
more SFINAE
This commit is contained in:
parent
ea1046110d
commit
0a96116b0c
1126
src/json.hpp
1126
src/json.hpp
File diff suppressed because it is too large
Load Diff
@ -54,6 +54,20 @@ iterators allow a ReversibleContainer to be iterated over in reverse.
|
|||||||
namespace nlohmann
|
namespace nlohmann
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
// Helper to determine whether there's a key_type for T.
|
||||||
|
// http://stackoverflow.com/a/7728728/266378
|
||||||
|
template<typename T>
|
||||||
|
struct has_key_type
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
template<typename C> static char test(typename C::key_type*);
|
||||||
|
template<typename C> static int test(...);
|
||||||
|
public:
|
||||||
|
enum { value = sizeof(test<T>(0)) == sizeof(char) };
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@brief JSON
|
@brief JSON
|
||||||
|
|
||||||
@ -809,7 +823,7 @@ class basic_json
|
|||||||
template <class T, typename
|
template <class T, typename
|
||||||
std::enable_if<
|
std::enable_if<
|
||||||
std::is_constructible<typename T::key_type, typename object_t::key_type>::value and
|
std::is_constructible<typename T::key_type, typename object_t::key_type>::value and
|
||||||
std::is_constructible<basic_json, typename T::mapped_type>::value, int>::type
|
std::is_constructible<typename T::mapped_type, basic_json>::value, int>::type
|
||||||
= 0>
|
= 0>
|
||||||
inline T get() const
|
inline T get() const
|
||||||
{
|
{
|
||||||
@ -826,7 +840,8 @@ class basic_json
|
|||||||
template <class T, typename
|
template <class T, typename
|
||||||
std::enable_if<
|
std::enable_if<
|
||||||
not std::is_same<T, string_t>::value and
|
not std::is_same<T, string_t>::value and
|
||||||
std::is_constructible<basic_json, typename T::value_type>::value, int>::type
|
not has_key_type<T>::value and
|
||||||
|
std::is_constructible<typename T::value_type, basic_json>::value, int>::type
|
||||||
= 0>
|
= 0>
|
||||||
inline T get() const
|
inline T get() const
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user