aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2019-05-17 15:13:43 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2019-05-17 15:13:43 +0100
commitac781bc88019eae2bb119d550f587ff4c9ff174d (patch)
tree664d5687a22e8960cd83248bfe0c488fb23d7265
parent593cda3e61f6645d4999b7065b6f49ce631567a3 (diff)
downloadgcc-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/ChangeLog4
-rw-r--r--libstdc++-v3/testsuite/20_util/variant/compile.cc10
-rw-r--r--libstdc++-v3/testsuite/20_util/variant/run.cc11
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