История изменений
Исправление utf8nowhere, (текущая версия) :
Грустная история
Почему грустная?
Поскольку конструкция синтаксически валидная, но семантически не однозначная, решили забить на решение вопроса.
А решение вообще есть?
По-моему, странно спорить как должен работать operator=
для optional<T&>
, если вообще непонятно, что вообще такое optional<T&>
.
Если мы объявляем переменную (или non-static data member) со ссылочным типом, то имя этой переменной (мембера) становится именем объекта, определяемого при инициализации. Т.е.:
T v1 = initializer; // создаём и инициализируем объект типа T. v1 — имя этого объекта
T& v2 = v1; // не создаём и не инициализируем никаких новых объектов. v2 — имя для того же объекта, что именуется именем v1
Что такое optional<T>
я понимаю. Это обозначает возможное отсутствие объекта типа T
. А что значит optional<T&>
???
Исправление utf8nowhere, :
Грустная история
Почему грустная?
Поскольку конструкция синтаксически валидная, но семантически не однозначная, решили забить на решение вопроса.
А решение вообще есть?
По-моему, странно спорить как должен работать operator=
для optional<T&>
, если вообще непонятно, что вообще такое optional<T&>
.
Если мы объявляем переменную (или non-static data member) со ссылочным типом, то имя этой переменной (мембера) становится именем объекта, определяемого при инициализации. Т.е.:
T v1 = e1; // создаём и инициализируем объект типа T. v1 — имя этого объекта
T& v2 = v1; // не создаём и не инициализируем никаких новых объектов. v2 — имя для того же объекта, что именуется именем v1
Что такое optional<T>
я понимаю. Это обозначает возможное отсутствие объекта типа T
. А что значит optional<T&>
???
Исходная версия utf8nowhere, :
Грустная история
А почему грустная?
Поскольку конструкция синтаксически валидная, но семантически не однозначная, решили забить на решение вопроса.
А решение вообще есть?
По-моему, странно спорить как должен работать operator=
для optional<T&>
, если вообще непонятно, что вообще такое optional<T&>
.
Если мы объявляем переменную (или non-static data member) со ссылочным типом, то имя этой переменной (мембера) становится именем объекта, определяемого при инициализации. Т.е.:
T v1 = e1; // создаём и инициализируем объект типа T. v1 — имя этого объекта
T& v2 = v1; // не создаём и не инициализируем никаких новых объектов. v2 — имя для того же объекта, что именуется именем v1
Что такое optional<T>
я понимаю. Это обозначает возможное отсутствие объекта типа T
. А что значит optional<T&>
???