Re[9]: Оператор приведения
От: night beast СССР  
Дата: 05.07.19 12:53
Оценка:
Здравствуйте, Videoman, Вы писали:

V>Что исключило подстановки optional<OtherType> вместо оператора копирования.

V>Спасибо вам огромное!

а это нормально что
        new(&m_data) Type(std::forward<OtherType>(value));

при OtherType == std::optional
дает не то значение, что хранится в value?
Re[10]: Оператор приведения
От: night beast СССР  
Дата: 05.07.19 13:03
Оценка:
Здравствуйте, night beast, Вы писали:

NB>а это нормально что

NB>
NB>        new(&m_data) Type(std::forward<OtherType>(value));
NB>

NB>при OtherType == std::optional
NB>дает не то значение, что хранится в value?

а, там оператор каста к бул есть.
Re[10]: Оператор приведения
От: Videoman Россия https://hts.tv/
Дата: 05.07.19 13:10
Оценка:
Здравствуйте, night beast, Вы писали:

NB>а это нормально что

NB>
NB>        new(&m_data) Type(std::forward<OtherType>(value));
NB>

NB>при OtherType == std::optional
NB>дает не то значение, что хранится в value?

Нет. Вот, как-раз сейчас, сижу с этим разбираюсь. У меня голова сейчас немного обалдела от этого optional. Почему реакция идет с такими задержками: дело в том, что у меня огромная библиотека и, как раз, там есть собственная реализация std::optional для 13-й Студии. Также, все обложено кучей моих же тестов, которые как раз сейчас валятся. Если вы уже поняли в чем ошибка и как лучше исправить — буду вам премного благодарен.

Вообще, вот эта конструкция:
inline optional<Type>::optional(OtherType&& value, std::decay_t<compatible_t<OtherType>>*) _NOEXCEPT

на практике оказывается очень "жадная".
Отредактировано 05.07.2019 13:14 Videoman . Предыдущая версия . Еще …
Отредактировано 05.07.2019 13:13 Videoman . Предыдущая версия .
Re[11]: Оператор приведения
От: Videoman Россия https://hts.tv/
Дата: 05.07.19 13:12
Оценка:
Здравствуйте, night beast, Вы писали:

NB>а, там оператор каста к бул есть.

Есть, и у VS2013 есть баг, который не видит explicit в этой ситуации и кастит к bool . По-этому и была единица.
Re[12]: Оператор приведения
От: night beast СССР  
Дата: 05.07.19 13:19
Оценка:
Здравствуйте, Videoman, Вы писали:

NB>>а, там оператор каста к бул есть.

V>Есть, и у VS2013 есть баг, который не видит explicit в этой ситуации и кастит к bool . По-этому и была единица.

для каста к бул есть safe bool idiom, можно ее попробовать
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.