[PATCH] libstdc++/77641 fix std::variant for literal types

Jonathan Wakely jwakely@redhat.com
Thu Sep 22 08:37:00 GMT 2016


On 22/09/16 09:45 +0300, Ville Voutilainen wrote:
>This problem is not introduced by the latest patch, but it's something that
>we should look at anyway. There's been recent discussion about what
>assignments do with variants that hold references. Consider this:
>
>#include <variant>
>
>int main()
>{
>   float f1 = 1.0f, f2 = 2.0f;
>
>   std::variant<float&> v1(f1);
>
>   v1 = f2; // #1
>}

It works if we add this to _Reference_storage:

      template<typename _Tp>
	_Reference_storage&
	operator=(_Tp&& __t)
	{
	  _M_storage = std::forward<_Tp>(__t);
	  return *this;
	}

I'm not sure if that's the right fix.



More information about the Libstdc++ mailing list