diff options
author | Tim Shen <timshen@google.com> | 2017-02-15 07:38:20 +0000 |
---|---|---|
committer | Tim Shen <timshen@gcc.gnu.org> | 2017-02-15 07:38:20 +0000 |
commit | 7d5abe42c27ca37bc9739f80e5f0f255206fed4f (patch) | |
tree | 588d0af58002afc87b184167aa087eb128b539aa | |
parent | fdbb46228fe7cb06c637e332752c26a510dd47d2 (diff) | |
download | gcc-7d5abe42c27ca37bc9739f80e5f0f255206fed4f.zip gcc-7d5abe42c27ca37bc9739f80e5f0f255206fed4f.tar.gz gcc-7d5abe42c27ca37bc9739f80e5f0f255206fed4f.tar.bz2 |
re PR libstdc++/79513 (std::visit doesn't handle references)
PR libstdc++/79513
* include/std/variant (visit()): Forward variant types to the return
type detection code.
* testsuite/20_util/variant/compile.cc: Add test cases.
From-SVN: r245474
-rw-r--r-- | libstdc++-v3/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/std/variant | 3 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/variant/compile.cc | 6 |
3 files changed, 15 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index e88fe2d..ec6e601c 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2017-02-15 Tim Shen <timshen@google.com> + + PR libstdc++/79513 + * include/std/variant (visit()): Forward variant types to the return + type detection code. + * testsuite/20_util/variant/compile.cc: Add test cases. + 2017-02-13 H.J. Lu <hongjiu.lu@intel.com> PR libstdc++/79348 diff --git a/libstdc++-v3/include/std/variant b/libstdc++-v3/include/std/variant index c5138e5..866c4c4 100644 --- a/libstdc++-v3/include/std/variant +++ b/libstdc++-v3/include/std/variant @@ -1263,7 +1263,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __throw_bad_variant_access("Unexpected index"); using _Result_type = - decltype(std::forward<_Visitor>(__visitor)(get<0>(__variants)...)); + decltype(std::forward<_Visitor>(__visitor)( + get<0>(std::forward<_Variants>(__variants))...)); constexpr auto& __vtable = __detail::__variant::__gen_vtable< _Result_type, _Visitor&&, _Variants&&...>::_S_vtable; diff --git a/libstdc++-v3/testsuite/20_util/variant/compile.cc b/libstdc++-v3/testsuite/20_util/variant/compile.cc index 65f4326..3bf9d5b 100644 --- a/libstdc++-v3/testsuite/20_util/variant/compile.cc +++ b/libstdc++-v3/testsuite/20_util/variant/compile.cc @@ -291,6 +291,12 @@ void test_visit() }; static_assert(visit(Visitor(), variant<int, nonliteral>(0)), ""); } + // PR libstdc++/79513 + { + std::variant<int> v [[gnu::unused]] (5); + std::visit([](int&){}, v); + std::visit([](int&&){}, std::move(v)); + } } void test_constexpr() |