C++11 编译器将新对对象分配给现有对对象时出错

C++11 编译器将新对对象分配给现有对对象时出错,c++11,boost,c++builder-xe7,C++11,Boost,C++builder Xe7,以下代码使用32位编译器在C++Builder XE7中生成错误: #include <utility> #include <boost/any.hpp> std::pair< int, boost::any > y; void test() { y = std::pair< int, boost::any >( 1, 2 ); // error! } 错误是: "Could not

以下代码使用32位编译器在C++Builder XE7中生成错误:

    #include <utility>
    #include <boost/any.hpp>

    std::pair< int, boost::any > y;
    void test()
    {
      y = std::pair< int, boost::any >( 1, 2 ); // error!
    }
错误是:

"Could not find a match for 'operator std::pair<int,boost::any>::=(std::pair<int,boost::any>)'"
我不明白。这段代码本身并没有什么问题,而且在更老的编译器中编译得很好。下面是一些有趣的内容:

1 64位编译器编译代码时不会出错

2如果我将该对的第二个类型从“boost::any”更改为内置类型,例如“int”,则代码编译时不会出错

作为一种变通方法,我能够做到:

    #include <utility>
    #include <boost/any.hpp>

    std::pair< int, boost::any > y;
    void test()
    {
      std::pair< int, boost::any > temp = std::pair< int, boost::any >( 1, 2 );
      y = temp;
    }
它的效率较低,但它使我避开了编译器错误

<>直到最近,我一直使用过时的C++编译器C++ +Builder 5/6,所以我没有跟上C++标准和C++ 11的变化。因此,我可能不知道有语言更改导致此代码无效。那么,有人能告诉我这个编译器错误是由于语言的改变,还是编译器的错误

谢谢


Dennis

我认为32位编译器10美元是没有希望的,如果你真的要构建32位可执行文件,那么作为一种解决方法,你可以使用TVariant而不是boost::Any。你的第一个例子调用操作符=&&,第二对-&然后操作符=常量&。在第二个示例中,向赋值添加一个移动,是否会得到相同的错误?std::move是C++11的一部分,32位编译器不支持它,但它正在工作。