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] 删除。
我来说两句