fix sfinae on basic_json UDT constructor

Avoid compiler errors when performing SFINAE checks on basic_json
and incomplete types.
This commit is contained in:
Théo DELRIEU 2018-01-17 12:17:38 +01:00
parent 3ac674562f
commit dcee778c1e
No known key found for this signature in database
GPG key ID: 7D6E00D1DF01DEAF
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, "");
}