diff options
author | Louis Dionne <ldionne@apple.com> | 2018-11-26 16:14:56 +0000 |
---|---|---|
committer | Louis Dionne <ldionne@apple.com> | 2018-11-26 16:14:56 +0000 |
commit | 20883fc20fa3d04c3f524c653f532fbd50e9f4ee (patch) | |
tree | a00685c3ef2ce91183ddcc710f3b258f3e0230f6 /libcxx/test/std/utilities/variant/variant.variant/variant.status/index.pass.cpp | |
parent | 422c828dfce022a87fe28473743c0111f582a0ee (diff) | |
download | bcm5719-llvm-20883fc20fa3d04c3f524c653f532fbd50e9f4ee.tar.gz bcm5719-llvm-20883fc20fa3d04c3f524c653f532fbd50e9f4ee.zip |
[libcxx] Use a type that is always an aggregate in variant's tests
Summary:
In PR39232, we noticed that some variant tests started failing in C++2a mode
with recent Clangs, because the rules for literal types changed in C++2a. As
a result, a temporary fix was checked in (enabling the test only in C++17).
This commit is what I believe should be the long term fix: I removed the
tests that checked constexpr default-constructibility with a weird type
from the tests for index() and valueless_by_exception(), and instead I
added tests for those using an obviously literal type in the test for the
default constructor.
Reviewers: EricWF, mclow.lists
Subscribers: christof, jkorous, dexonsmith, arphaman, libcxx-commits, rsmith
Differential Revision: https://reviews.llvm.org/D54767
llvm-svn: 347568
Diffstat (limited to 'libcxx/test/std/utilities/variant/variant.variant/variant.status/index.pass.cpp')
-rw-r--r-- | libcxx/test/std/utilities/variant/variant.variant/variant.status/index.pass.cpp | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.status/index.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.status/index.pass.cpp index 7ab828eb0bf..6d78de3a48b 100644 --- a/libcxx/test/std/utilities/variant/variant.variant/variant.status/index.pass.cpp +++ b/libcxx/test/std/utilities/variant/variant.variant/variant.status/index.pass.cpp @@ -10,14 +10,6 @@ // UNSUPPORTED: c++98, c++03, c++11, c++14 -// The following compilers don't consider a type an aggregate type (and -// consequently not a literal type) if it has a base class at all. -// In C++17, an aggregate type is allowed to have a base class if it's not -// virtual, private, nor protected (e.g. ConstexprTestTypes:::NoCtors). -// XFAIL: gcc-5, gcc-6 -// XFAIL: clang-3.5, clang-3.6, clang-3.7, clang-3.8 -// XFAIL: apple-clang-6, apple-clang-7, apple-clang-8.0 - // <variant> // template <class ...Types> class variant; @@ -33,14 +25,18 @@ #include "test_macros.h" #include "variant_test_helpers.hpp" + int main() { -#if TEST_STD_VER == 17 - { // This test does not pass on C++20 or later; see https://bugs.llvm.org/show_bug.cgi?id=39232 - using V = std::variant<int, ConstexprTestTypes::NoCtors>; + { + using V = std::variant<int, long>; constexpr V v; static_assert(v.index() == 0, ""); } -#endif + { + using V = std::variant<int, long>; + V v; + assert(v.index() == 0); + } { using V = std::variant<int, long>; constexpr V v(std::in_place_index<1>); |