This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
[v3, patch, variant] user-defined operator& and std::variant
- From: Mikhail Strelnikov <mikhail dot strelnikov at gmail dot com>
- To: gcc-patches at gcc dot gnu dot org, libstdc++ at gcc dot gnu dot org
- Date: Sat, 3 Sep 2016 22:46:29 +0300
- Subject: [v3, patch, variant] user-defined operator& and std::variant
- Authentication-results: sourceware.org; auth=none
Hello,
Following code does not compile,
#include <variant>
namespace n
{
template<typename T>
void operator&(T) {}
struct s{};
}
int main()
{
std::variant<n::s> v;
std::get<n::s>(v);
}
error: include/c++/7.0.0/variant:315:4: error: invalid static_cast
diff -r -u a/libstdc++-v3/include/std/variant b/libstdc++-v3/include/std/variant
--- a/libstdc++-v3/include/std/variant 2016-08-26 13:34:30.823029400 +0300
+++ b/libstdc++-v3/include/std/variant 2016-09-03 18:01:26.431299300 +0300
@@ -312,7 +312,7 @@
_M_storage() const
{
return const_cast<void*>(
- static_cast<const void*>(&_M_first._M_storage));
+ static_cast<const void*>(std::__addressof(_M_first._M_storage)));
}
union