次のコードは、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) ペアの 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 の変更について最新の状態に保っていませんでした。したがって、このコードを無効にする言語の変更に気付いていない可能性があります。では、このコンパイラ エラーが言語の変更の結果なのか、それともコンパイラのバグなのか、誰か教えてください。
ありがとう、
デニス