Merge pull request #919 from theodelrieu/fix/sfinae_for_incomplete_types

fix sfinae on basic_json UDT constructor
This commit is contained in:
Niels Lohmann 2018-01-23 07:32:06 +01:00 committed by GitHub
commit f5c4e9f3a1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 83 additions and 20 deletions

View file

@ -692,3 +692,22 @@ TEST_CASE("custom serializer that does adl by default", "[udt]")
CHECK(me == j.get<udt::person>());
CHECK(me == cj.get<udt::person>());
}
namespace
{
struct incomplete;
// std::is_constructible is broken on macOS' libc++
// use the cppreference implementation
template <typename T, typename = void>
struct is_constructible_patched : std::false_type {};
template <typename T>
struct is_constructible_patched<T, decltype(void(json(std::declval<T>())))> : std::true_type {};
}
TEST_CASE("an incomplete type does not trigger a compiler error in non-evaluated context", "[udt]")
{
static_assert(not is_constructible_patched<json, incomplete>::value, "");
}