Re[8]: Оператор приведения
От: Videoman Россия https://hts.tv/
Дата: 05.07.19 12:40
Оценка: 1 (1)
Здравствуйте, 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
Отредактировано 05.07.2019 12:46 Videoman . Предыдущая версия . Еще …
Отредактировано 05.07.2019 12:40 Videoman . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.