Unbreak is_constructible tests for Clang <= 3.7.
There is a bug in Clang's __is_constructible builtin that causes it to return true for function types; ex [T = void()]. llvm-svn: 276092
This commit is contained in:
parent
d5b5359802
commit
85acffa676
|
@ -151,9 +151,21 @@ int main()
|
||||||
test_is_constructible<PrivateDtor&, PrivateDtor&>();
|
test_is_constructible<PrivateDtor&, PrivateDtor&>();
|
||||||
test_is_not_constructible<PrivateDtor, int>();
|
test_is_not_constructible<PrivateDtor, int>();
|
||||||
|
|
||||||
|
test_is_not_constructible<void() const, void() const>();
|
||||||
|
test_is_not_constructible<void() const, void*>();
|
||||||
|
|
||||||
|
// TODO: Remove this workaround once Clang <= 3.7 are no longer used regularly.
|
||||||
|
// In those compiler versions the __is_constructible builtin gives the wrong
|
||||||
|
// results for abominable function types.
|
||||||
|
#if defined(__clang__) && __clang_major__ == 3 && __clang_minor__ < 8
|
||||||
|
#define WORKAROUND_CLANG_BUG
|
||||||
|
#endif
|
||||||
|
#if !defined(WORKAROUND_CLANG_BUG)
|
||||||
|
test_is_not_constructible<void()>();
|
||||||
test_is_not_constructible<void() const> ();
|
test_is_not_constructible<void() const> ();
|
||||||
test_is_not_constructible<void() volatile> ();
|
test_is_not_constructible<void() volatile> ();
|
||||||
test_is_not_constructible<void() &> ();
|
test_is_not_constructible<void() &> ();
|
||||||
test_is_not_constructible<void() &&> ();
|
test_is_not_constructible<void() &&> ();
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,7 +107,19 @@ int main()
|
||||||
#if TEST_STD_VER >= 11
|
#if TEST_STD_VER >= 11
|
||||||
test_is_not_default_constructible<B>();
|
test_is_not_default_constructible<B>();
|
||||||
test_is_not_default_constructible<int&&>();
|
test_is_not_default_constructible<int&&>();
|
||||||
|
|
||||||
|
// TODO: Remove this workaround once Clang <= 3.7 are no longer used regularly.
|
||||||
|
// In those compiler versions the __is_constructible builtin gives the wrong
|
||||||
|
// results for abominable function types.
|
||||||
|
#if defined(__clang__) && __clang_major__ == 3 && __clang_minor__ < 8
|
||||||
|
#define WORKAROUND_CLANG_BUG
|
||||||
|
#endif
|
||||||
|
#if !defined(WORKAROUND_CLANG_BUG)
|
||||||
test_is_not_default_constructible<void()>();
|
test_is_not_default_constructible<void()>();
|
||||||
test_is_not_default_constructible<void() const> ();
|
test_is_not_default_constructible<void() const> ();
|
||||||
|
test_is_not_default_constructible<void() volatile> ();
|
||||||
|
test_is_not_default_constructible<void() &> ();
|
||||||
|
test_is_not_default_constructible<void() &&> ();
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue