История изменений
Исправление 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&>???