std :: back_inserter требует const_reference в старом GCC. Почему?

В настоящее время я просматриваю код, который может быть скомпилирован в новых версиях GCC, но не в старых. единицы. В моем случае я использую от std :: back_inserter до std :: copy некоторые данные из одной структуры данных в пользовательскую структуру данных. Однако, если я забуду typedef value_type и const_reference typedef в этой настраиваемой структуре данных, это не будет компилироваться в GCC 4.4. Тот же код компилируется и отлично работает на GCC 4.5.

В чем разница между этими двумя версиями компилятора, из-за которой код компилируется в одной версии, но не в другой. Я предполагаю, что это как-то связано с реализацией C ++ 11, которая была гораздо менее полной в GCC 4.4. Наверное, что-то с decltype или другим новым ключевым словом C ++ 11, я полагаю.

Также правильный ли этот код, если я использую std :: back_inserter без определения типа const_reference ? Обычно я думал, что нужно реализовать полный набор определений типов ( value_type , reference , const_reference и т.д.), чтобы быть совместимым с библиотекой STL-алгоритмов. ? Или я могу с уверенностью предположить, что если мой код компилируется в этом случае, я не вызываю ничего опасного (например,переместить семантику, которая разрушит мою другую структуру данных).

5
задан LiKao 10 November 2011 в 14:30
поделиться