From 86e9c5f13d2dd07b8be5e69854e20ed218a3ee14 Mon Sep 17 00:00:00 2001 From: Casey Carter Date: Tue, 6 Dec 2016 02:28:19 +0000 Subject: [PATCH] std::get<0>([std::variant constant expression]) *is* noexcept. Differential review: http://reviews.llvm.org/D27436 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288760 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../variant/variant.get/get_index.pass.cpp | 21 ++++++++++++++++++- .../variant/variant.get/get_type.pass.cpp | 21 ++++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/test/std/utilities/variant/variant.get/get_index.pass.cpp b/test/std/utilities/variant/variant.get/get_index.pass.cpp index 669da5305..72d17b0ed 100644 --- a/test/std/utilities/variant/variant.get/get_index.pass.cpp +++ b/test/std/utilities/variant/variant.get/get_index.pass.cpp @@ -36,16 +36,35 @@ void test_const_lvalue_get() { { using V = std::variant; constexpr V v(42); - ASSERT_NOT_NOEXCEPT(std::get<0>(v)); +#ifndef __clang__ // Avoid https://llvm.org/bugs/show_bug.cgi?id=15481 + ASSERT_NOEXCEPT(std::get<0>(v)); +#endif ASSERT_SAME_TYPE(decltype(std::get<0>(v)), const int &); static_assert(std::get<0>(v) == 42, ""); } + { + using V = std::variant; + const V v(42); + ASSERT_NOT_NOEXCEPT(std::get<0>(v)); + ASSERT_SAME_TYPE(decltype(std::get<0>(v)), const int &); + assert(std::get<0>(v) == 42); + } { using V = std::variant; constexpr V v(42l); +#ifndef __clang__ // Avoid https://llvm.org/bugs/show_bug.cgi?id=15481 + ASSERT_NOEXCEPT(std::get<1>(v)); +#endif ASSERT_SAME_TYPE(decltype(std::get<1>(v)), const long &); static_assert(std::get<1>(v) == 42, ""); } + { + using V = std::variant; + const V v(42l); + ASSERT_NOT_NOEXCEPT(std::get<1>(v)); + ASSERT_SAME_TYPE(decltype(std::get<1>(v)), const long &); + assert(std::get<1>(v) == 42); + } // FIXME: Remove these once reference support is reinstated #if !defined(TEST_VARIANT_HAS_NO_REFERENCES) { diff --git a/test/std/utilities/variant/variant.get/get_type.pass.cpp b/test/std/utilities/variant/variant.get/get_type.pass.cpp index 497f00401..fc355378a 100644 --- a/test/std/utilities/variant/variant.get/get_type.pass.cpp +++ b/test/std/utilities/variant/variant.get/get_type.pass.cpp @@ -30,16 +30,35 @@ void test_const_lvalue_get() { { using V = std::variant; constexpr V v(42); - ASSERT_NOT_NOEXCEPT(std::get(v)); +#ifndef __clang__ // Avoid https://llvm.org/bugs/show_bug.cgi?id=15481 + ASSERT_NOEXCEPT(std::get(v)); +#endif ASSERT_SAME_TYPE(decltype(std::get<0>(v)), const int &); static_assert(std::get(v) == 42, ""); } + { + using V = std::variant; + const V v(42); + ASSERT_NOT_NOEXCEPT(std::get(v)); + ASSERT_SAME_TYPE(decltype(std::get<0>(v)), const int &); + assert(std::get(v) == 42); + } { using V = std::variant; constexpr V v(42l); +#ifndef __clang__ // Avoid https://llvm.org/bugs/show_bug.cgi?id=15481 + ASSERT_NOEXCEPT(std::get(v)); +#endif ASSERT_SAME_TYPE(decltype(std::get(v)), const long &); static_assert(std::get(v) == 42, ""); } + { + using V = std::variant; + const V v(42l); + ASSERT_NOT_NOEXCEPT(std::get(v)); + ASSERT_SAME_TYPE(decltype(std::get(v)), const long &); + assert(std::get(v) == 42); + } // FIXME: Remove these once reference support is reinstated #if !defined(TEST_VARIANT_HAS_NO_REFERENCES) {