public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Fix return type detection in <variant> visit()
@ 2017-02-14 22:07 Tim Shen via gcc-patches
  2017-02-15  6:54 ` Jonathan Wakely
  0 siblings, 1 reply; 3+ messages in thread
From: Tim Shen via gcc-patches @ 2017-02-14 22:07 UTC (permalink / raw)
  To: libstdc++, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 122 bytes --]

This is an obvious missing std::forward. :)

Testing on x86_64-linux-gnu, but I expect it to pass.

-- 
Regards,
Tim Shen

[-- Attachment #2: a.diff --]
[-- Type: text/x-patch, Size: 1593 bytes --]

commit 08235141a7e06db2b604b5869c9d8e4aaf8fa29b
Author: Tim Shen <timshen@google.com>
Date:   Tue Feb 14 13:55:18 2017 -0800

    2017-02-14  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.

diff --git a/libstdc++-v3/include/std/variant b/libstdc++-v3/include/std/variant
index c5138e56803..866c4c40a61 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 65f4326c397..d40a4ccb784 100644
--- a/libstdc++-v3/testsuite/20_util/variant/compile.cc
+++ b/libstdc++-v3/testsuite/20_util/variant/compile.cc
@@ -291,6 +291,13 @@ void test_visit()
     };
     static_assert(visit(Visitor(), variant<int, nonliteral>(0)), "");
   }
+  // PR libstdc++/79513
+  {
+    std::variant<int> v(5);
+    std::visit([](int&){}, v);
+    std::visit([](int&&){}, std::move(v));
+    (void)v;
+  }
 }
 
 void test_constexpr()

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-02-15  7:43 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-14 22:07 [PATCH] Fix return type detection in <variant> visit() Tim Shen via gcc-patches
2017-02-15  6:54 ` Jonathan Wakely
2017-02-15  8:15   ` Tim Shen via gcc-patches

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).