more SFINAE
This commit is contained in:
parent
ea1046110d
commit
0a96116b0c
2 changed files with 393 additions and 752 deletions
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 a new issue