不允许使用多个版本的默认特殊成员函数 (MSVC)

问题描述

这是一个有效的 C++ 代码

struct S
{
    S(S const&) = default;
    S(S&) = default;
};

上下文:

我试图通过将这两行添加S (godbolt) 来处理以下代码中的歧义:

#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错误是:

<source>(8): error C2580: 'S::S(S &)': multiple versions of a defaulted special member functions are not allowed

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)