more SFINAE
This commit is contained in:
parent
ea1046110d
commit
0a96116b0c
2 changed files with 393 additions and 752 deletions
1124
src/json.hpp
1124
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
|
||||
{
|
||||
|
||||
|
||||
// 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
|
||||
|
||||
|
@ -809,7 +823,7 @@ class basic_json
|
|||
template <class T, typename
|
||||
std::enable_if<
|
||||
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>
|
||||
inline T get() const
|
||||
{
|
||||
|
@ -826,7 +840,8 @@ class basic_json
|
|||
template <class T, typename
|
||||
std::enable_if<
|
||||
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>
|
||||
inline T get() const
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue