Вимоги до контейнерів змінилися з C ++ 03 на C ++ 11. Хоча C ++ 03 мав загальні вимоги (наприклад, конструктивність копіювання та призначення для вектора), C ++ 11 визначає дрібні вимоги щодо кожної операції з контейнером (розділ 23.2).
Як результат, ви можете, наприклад, зберігати тип, який можна сконструювати, але не можна призначити - наприклад, структуру з елементом const - у векторі, якщо ви виконуєте лише певні операції, які не вимагають присвоєння (побудова і push_back
є такими операціями ; insert
не є).
Мені цікаво: чи означає це, що зараз дозволяє стандарт vector<const T>
? Я не бачу жодної причини, чому це не повинно - так const T
само, як структура з членом const - це тип, який можна конструювати за копією, але не можна призначити - але я, можливо, щось пропустив.
(Частиною того, що змушує мене думати, що я щось міг пропустити, є те, що магістральний gcc аварійно завершує роботу і згорає, якщо ви намагаєтеся створити екземпляр vector<const T>
, але це добре з тим, vector<T>
де у T є учасник const).
address
функцій-членів у розподілювачі за замовчуванням: Коли T є const, ці дві перевантаження мають однаковий підпис. Найпростішим способом виправити це було б спеціалізаціяstd::allocator<const T>
та усунення одного з перевантажень.