Commit 0a96116b authored by Niels's avatar Niels

more SFINAE

parent ea104611
This diff is collapsed.
......@@ -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
{
......
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