boost :: variable和moveconstructible

用户名

boost :: variant 1.57规范指出:

对有界类型的要求如下:CopyConstructible或MoveConstructible。

但以下代码无法在MSVC2012上编译。

#include <boost\variant.hpp>

struct A
{
    A(){}
    A(A&& other){}

    A operator=(A&& other){return *this;}

private:
    A(A const & other){} // MSVC2012 does not support deleted
};

int main() 
{
    boost::variant<A> testVariant;

    testVariant = A();
}

错误C2248:“ A :: A”:无法访问在类“ A”中声明的私有成员

是因为在MSVC2012编译器中缺少对C ++ 11的适当支持,还是因为boost :: variant错误?

如果MSVC2012有问题,那么您是否知道任何解决方法?

更新

在我的简短示例中,缺少移动分配运算符。我更新了示例。

将throw()添加到默认构造函数可解决此问题。以前,我尝试将throw()添加到move构造函数和move运算符,但这没有用。谢谢sehe

据我所知,您还需要移动分配。

并将默认构造函数设为noexcept:

struct A
{
    A() noexcept {}
    A(A&&) {}
    A& operator=(A&&) {}

private:
    A(A const&){} // MSVC2012 does not support deleted
};

如果MSVC2012不支持noexcept(我相信它不支持),您可以尝试throw()(或者Boost可以优雅地允许它)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章