微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决不允许使用多个版本的默认特殊成员函数 (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 举报,一经查实,本站将立刻删除。