LINUX.ORG.RU

История изменений

Исправление 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&>???