diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2019-05-17 15:13:43 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2019-05-17 15:13:43 +0100 |
commit | ac781bc88019eae2bb119d550f587ff4c9ff174d (patch) | |
tree | 664d5687a22e8960cd83248bfe0c488fb23d7265 | |
parent | 593cda3e61f6645d4999b7065b6f49ce631567a3 (diff) | |
download | gcc-ac781bc88019eae2bb119d550f587ff4c9ff174d.zip gcc-ac781bc88019eae2bb119d550f587ff4c9ff174d.tar.gz gcc-ac781bc88019eae2bb119d550f587ff4c9ff174d.tar.bz2 |
Fix std::variant test for ILP32 targets
* testsuite/20_util/variant/compile.cc: Fix narrowing test for ILP32
targets. Add more cases from P0608R3.
* testsuite/20_util/variant/run.cc: Add more cases from P0608R3.
From-SVN: r271325
-rw-r--r-- | libstdc++-v3/ChangeLog | 4 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/variant/compile.cc | 10 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/variant/run.cc | 11 |
3 files changed, 24 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 397b8ed..1ba66d8 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,9 @@ 2019-05-17 Jonathan Wakely <jwakely@redhat.com> + * testsuite/20_util/variant/compile.cc: Fix narrowing test for ILP32 + targets. Add more cases from P0608R3. + * testsuite/20_util/variant/run.cc: Add more cases from P0608R3. + * include/bits/random.h (seed_seq::param): Fix non-reserved name. * include/experimental/type_traits (is_detected_exact) (is_detected_exact_v): Likewise. diff --git a/libstdc++-v3/testsuite/20_util/variant/compile.cc b/libstdc++-v3/testsuite/20_util/variant/compile.cc index 4560f77..dc3d4c2 100644 --- a/libstdc++-v3/testsuite/20_util/variant/compile.cc +++ b/libstdc++-v3/testsuite/20_util/variant/compile.cc @@ -144,7 +144,15 @@ void arbitrary_ctor() static_assert(noexcept(variant<int, DefaultNoexcept>(DefaultNoexcept{}))); // P0608R3 disallow narrowing conversions and boolean conversions - static_assert(!is_constructible_v<variant<int>, long>); + static_assert(!is_constructible_v<variant<float>, int>); + static_assert(!is_constructible_v<variant<float, vector<int>>, int>); + static_assert(is_constructible_v<variant<float, int>, char>); + static_assert(!is_constructible_v<variant<float, char>, int>); + static_assert(is_constructible_v<variant<float, long>, int>); + struct big_int { big_int(int) { } }; + static_assert(is_constructible_v<variant<float, big_int>, int>); + + static_assert(!is_constructible_v<variant<int>, unsigned>); static_assert(!is_constructible_v<variant<bool>, int>); static_assert(!is_constructible_v<variant<bool>, void*>); } diff --git a/libstdc++-v3/testsuite/20_util/variant/run.cc b/libstdc++-v3/testsuite/20_util/variant/run.cc index ac60ccb..045e1f2 100644 --- a/libstdc++-v3/testsuite/20_util/variant/run.cc +++ b/libstdc++-v3/testsuite/20_util/variant/run.cc @@ -128,6 +128,17 @@ void arbitrary_ctor() VERIFY(y.index() == 1); VERIFY(std::get<1>(y).d == d); } + + { + // P0608R3 + variant<float, int> v1 = 'a'; + VERIFY(std::get<1>(v1) == int('a')); + variant<float, long> v2 = 0; + VERIFY(std::get<1>(v2) == 0L); + struct big_int { big_int(int) { } }; + variant<float, big_int> v3 = 0; + VERIFY(v3.index() == 1); + } } struct ThrowingMoveCtorThrowsCopyCtor |