Требования к контейнерам изменились с C ++ 03 на C ++ 11. В то время как C ++ 03 имел общие требования (например, возможность создания копий и возможность назначения для вектора), C ++ 11 определяет подробные требования для каждой операции контейнера (раздел 23.2).
В результате вы можете, например, хранить в векторе тип, который можно копировать, но не присваивать, например структуру с константным членом, при условии, что вы выполняете только определенные операции, которые не требуют присваивания (конструкция и push_back
являются такими операциями ; insert
не является).
Что мне интересно: означает ли это, что стандарт теперь позволяет vector
? Я не вижу причин, по которым это не должно быть - const T
, как и структура с членом const, является типом, который можно копировать, но не присваивать - но я, возможно, что-то пропустил.
(Отчасти я думаю, что я что-то упустил, так это то, что ствол gcc вылетает и сгорает, если вы пытаетесь создать экземпляр vector
, но с vector
, где T имеет постоянный член).