diff options
author | Eric Fiselier <eric@efcs.ca> | 2016-12-02 21:17:51 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2016-12-02 21:17:51 +0000 |
commit | 96be8df23ef2eb47631fc24481d76a19899cd7ee (patch) | |
tree | f3c8f7805ca237b2a483bec8d2f0ba70c6060d2a /libcxx/test/std/utilities/variant/variant.variant/variant.ctor/move.pass.cpp | |
parent | 9ee60031464bcc557359323653115724893124c6 (diff) | |
download | bcm5719-llvm-96be8df23ef2eb47631fc24481d76a19899cd7ee.tar.gz bcm5719-llvm-96be8df23ef2eb47631fc24481d76a19899cd7ee.zip |
Add tests for libc++'s constexpr variant copy/move extension
llvm-svn: 288536
Diffstat (limited to 'libcxx/test/std/utilities/variant/variant.variant/variant.ctor/move.pass.cpp')
-rw-r--r-- | libcxx/test/std/utilities/variant/variant.variant/variant.ctor/move.pass.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/move.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/move.pass.cpp index dcc973f074f..2a87f32ef9a 100644 --- a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/move.pass.cpp +++ b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/move.pass.cpp @@ -166,9 +166,32 @@ void test_move_ctor_valueless_by_exception() { #endif } +template <size_t Idx> +constexpr bool test_constexpr_ctor_extension_imp( + std::variant<long, void*, const int> const& v) +{ + auto copy = v; + auto v2 = std::move(copy); + return v2.index() == v.index() && + v2.index() == Idx && + std::get<Idx>(v2) == std::get<Idx>(v); +} + +void test_constexpr_move_ctor_extension() { +#ifdef _LIBCPP_VERSION + using V = std::variant<long, void*, const int>; + static_assert(std::is_trivially_copyable<V>::value, ""); + static_assert(std::is_trivially_move_constructible<V>::value, ""); + static_assert(test_constexpr_ctor_extension_imp<0>(V(42l)), ""); + static_assert(test_constexpr_ctor_extension_imp<1>(V(nullptr)), ""); + static_assert(test_constexpr_ctor_extension_imp<2>(V(101)), ""); +#endif +} + int main() { test_move_ctor_basic(); test_move_ctor_valueless_by_exception(); test_move_noexcept(); test_move_ctor_sfinae(); + test_constexpr_move_ctor_extension(); } |