编译器错误将新的pair <t>对象分配给现有的pair <t>对象

时间:2015-05-09 04:56:21

标签: 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 find a match for 'operator std::pair<int,boost::any>::=(std::pair<int,boost::any>)'"

我不明白。这段代码没有任何内在错误,并且它在(很多)旧编译器中编译得很好。现在这里有趣的是:

1)64位编译器无错误地编译代码

2)如果我从&#39; boost :: any&#39;更改对的第二种类型对于内置类型,例如&#39; int&#39;,代码编译时没有错误

作为解决方法,我能够做到这一点:

    #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的变化。因此,我可能不知道导致此代码无效的语言更改。那么,有人可以告诉我这个编译器错误是否是语言更改的结果,还是编译器错误?

谢谢,

丹尼斯

0 个答案:

没有答案