Информация об изменениях

Сообщение Re[8]: Оператор приведения от 05.07.2019 12:40

Изменено 05.07.2019 12:40 Videoman

Re[8]: Оператор приведения
Здравствуйте, night beast, Вы писали:

NB>возможны два варианта


NB>1. заменить

NB>optional& operator=(optional that) noexcept;
NB>на
NB>optional& operator=(const optional& that) noexcept;
NB>optional& operator=(optional&& that) noexcept;

NB>2. заменить (пишу на глаз)

NB>std::decay_t<compatible_t<OtherType>>*
NB>на
NB>std::enable_if_t< compatible_v<OtherType> && !std::is_same_v<optional, std::decay_t<OtherType>> >*

Исправилось! Заменил compatible_t на токое:
template <typename OtherType>
using compatible_t = std::enable_if_t<
std::is_constructible<Type, std::remove_cv_t<OtherType>&&>::value && !is_same<optional, std::decay_t<OtherType>>::value, std::decay_t<OtherType>>;

Что исключило подстановки optional<OtherType> вместо оператора копирования.
Спасибо вам огромное!
Re[8]: Оператор приведения
Здравствуйте, night beast, Вы писали:

NB>возможны два варианта


NB>1. заменить

NB>optional& operator=(optional that) noexcept;
NB>на
NB>optional& operator=(const optional& that) noexcept;
NB>optional& operator=(optional&& that) noexcept;

NB>2. заменить (пишу на глаз)

NB>std::decay_t<compatible_t<OtherType>>*
NB>на
NB>std::enable_if_t< compatible_v<OtherType> && !std::is_same_v<optional, std::decay_t<OtherType>> >*

Исправилось! Заменил compatible_t на токое:
template <typename OtherType>
using compatible_t = std::enable_if_t<
std::is_constructible<Type, std::remove_cv_t<OtherType>&&>::value && !is_same<optional, std::decay_t<OtherType>>::value, std::decay_t<OtherType>>;

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

P.S. Скорее бы переползти на C++17