【发布时间】:2012-12-25 03:12:01
【问题描述】:
我正在尝试在 Visual Studio 2008 下编译以下代码:
struct test
{
boost::container::vector<int> v1;
};
test v1, v3;
const test & v2 = v3;
v1 = v2;
我得到的错误是:
error C2679: binary '=' : no operator found which take a right-hand operand of type 'const test'(或者没有可接受的转换)
可能是“测试 &test::operator =(test &)”
在尝试匹配参数列表'(test, const test)'时
当使用普通的 std::vector 而不是 boost::container 等效项时,代码会编译。我正在寻找为什么此代码无法编译以及如何使其编译的答案。
【问题讨论】:
-
FWIW,以下代码在 MSVC10 下编译:#include
struct test { boost::container::vector v1; }; int main() { 测试 v1, v3;常量测试 & v2 = v3; v1 = v2; } -
另一个 FWIW:使用
-std=gnu++03的 GCC 4.7.2 以类似于 VC++ 2008 的方式失败。它使用-std=gnu++11编译得很好,但话又说回来,boost move 库的全部要点(其中是boost::container::vector正在使用的导致问题的)是为 C++03 实现提供移动语义,因此使用支持 C++11 移动语义的编译器/编译器模式编译时没有问题也就不足为奇了。看起来在处理可复制的 const 对象的 boost move 中可能存在错误。
标签: visual-studio-2008 visual-c++ boost