Здравствуйте, Videoman, Вы писали:
V>Что исключило подстановки optional<OtherType> вместо оператора копирования.
V>Спасибо вам огромное!
а это нормально что
new(&m_data) Type(std::forward<OtherType>(value));
при OtherType == std::optional
дает не то значение, что хранится в value?
Здравствуйте, night beast, Вы писали:
NB>а это нормально что
NB>NB> new(&m_data) Type(std::forward<OtherType>(value));
NB>
NB>при OtherType == std::optional
NB>дает не то значение, что хранится в value?
а, там оператор каста к бул есть.
Здравствуйте, 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
на практике оказывается очень "жадная".
Здравствуйте, night beast, Вы писали:
NB>а, там оператор каста к бул есть.
Есть, и у VS2013 есть баг, который не видит explicit в этой ситуации и кастит к bool
. По-этому и была единица.
Здравствуйте, Videoman, Вы писали:
NB>>а, там оператор каста к бул есть.
V>Есть, и у VS2013 есть баг, который не видит explicit в этой ситуации и кастит к bool . По-этому и была единица.
для каста к бул есть safe bool idiom, можно ее попробовать