这是有效的 C++ 代码吗:
struct S
{
S(S const&) = default;
S(S&) = default;
};
?
Context:
我尝试通过将这两行添加到以下代码中来处理歧义S
(godbolt https://godbolt.org/z/j9znrY6ef):
#include <utility>
struct Inner
{
Inner(int);
};
struct Outer
{
//Outer(Outer const&) = default;
//Outer(Outer&) = default;
template<class T>
Outer(T&& inner) : inner_(std::forward<T>(inner)) {}
Inner inner_;
};
auto foo()
{
auto v1 = Outer(1);
Outer v2 = v1;
return v2.inner_;
}
取消注释两行S
让 GCC 高兴,但 MSVC 产生错误 C2580。问题是——MSVC 正确与否?
上面的错误S
is:
<source>(8): error C2580: 'S::S(S &)': multiple versions of a defaulted special member functions are not allowed
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)