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