diff options
| -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() | 
