Здравствуйте, vopl, Вы писали:
V>>> Он относится ко всему copy целиком, со всеми его эффектами, включая связность с lifetime
BFE>>
Ну попробуйте это обосновать.
V>Ну, обоснование у меня вряд ли получится сформулировать. Вместо обоснования — приведу свою логику рассуждений:
V>нет оснований полагать что в стандарте под выдавливанием copy пониматся не copy а некий "copy part", так как там не указано, какие именно аспекты copy будут выдавлены а какие — нет. Таким образом я считаю что имеется ввиду весь copy целиком.
lifetime — это не результат создания объекта. lifetime — это свойство объекта, присущее объекту в некоторые отрезки выполнения программы (от конца конструктора до начала деструктора).
Если это свойство выкидывается вместе с конструктором, то в коде примера ниже someDictionary вообще не начинает жить, а следовательно, const должен игнорироваться полностью, следовательно объект someDictionary можно менять (ведь его время жизни ещё не началось):
std::map<int, int> buildMap()
{
std::map<int, int> result;
return result;
}
const std::map<int, int> someDictionary = buildMap();
someDictionary[42] = 43;
А это некоторый абсурд, так что выкидывать lifetime вместе с конструктором нельзя.