aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Shen <timshen@google.com>2017-02-15 07:38:20 +0000
committerTim Shen <timshen@gcc.gnu.org>2017-02-15 07:38:20 +0000
commit7d5abe42c27ca37bc9739f80e5f0f255206fed4f (patch)
tree588d0af58002afc87b184167aa087eb128b539aa
parentfdbb46228fe7cb06c637e332752c26a510dd47d2 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--libstdc++-v3/include/std/variant3
-rw-r--r--libstdc++-v3/testsuite/20_util/variant/compile.cc6
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()