Ошибка компилятора при назначении новой пары<T> объект существующей паре<T> объект

Следующий код выдает ошибку в C++Builder XE7 с использованием 32-разрядного компилятора:

    #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. Поэтому я мог не знать об изменении языка, которое делает этот код недействительным. Итак, может кто-нибудь сказать мне, если эта ошибка компилятора является результатом изменения языка, или это ошибка компилятора?

Спасибо,

Деннис

0 ответов

Другие вопросы по тегам