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