1

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

ありがとう、

デニス

4

0 に答える 0