Сообщение 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 на токое:
Что исключило подстановки optional<OtherType> вместо оператора копирования.
Спасибо вам огромное!
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 на токое:
Что исключило подстановки optional<OtherType> вместо оператора копирования.
Спасибо вам огромное!
P.S. Скорее бы переползти на C++17
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