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

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

Изменено 05.07.2019 11:13 night beast

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

NB>>код?


V>В строчке 496 именно в VS2013 после копирования optCopy == 1, а не 1234. Я сейчас не очень красиво выгляжу, но я что-то не могу найти online компилятор для VS2013, и не могу вам это наглядно показать.

V>На VS2015, VS2017, VS2019 на GCC которые мне доступны ваше исправления отлично работает. В случае копирования optional вызывается оператор копирования, как я и ожидал. Я склоняюсь к тому что это опять глюк компилятора VS2013. На ней при копировании вызывается optional(OtherType&& value, std::decay_t<compatible_t<OtherType>>*) с параметром шаблона optional<int> ???

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

1. заменить
optional& operator=(optional that) noexcept;
на
optional& operator=(const optional& that) noexcept;
optional& operator=(optional&& that) noexcept;

2. заменить (пишу на глаз)
std::decay_t<compatible_t<OtherType>>*
на
std::enable_if_t< compatible_v<OtherType> && !std::is_same<optional, std::decay_t<OtherType>> >*
Re[7]: Оператор приведения
Здравствуйте, Videoman, Вы писали:

NB>>код?


V>В строчке 496 именно в VS2013 после копирования optCopy == 1, а не 1234. Я сейчас не очень красиво выгляжу, но я что-то не могу найти online компилятор для VS2013, и не могу вам это наглядно показать.

V>На VS2015, VS2017, VS2019 на GCC которые мне доступны ваше исправления отлично работает. В случае копирования optional вызывается оператор копирования, как я и ожидал. Я склоняюсь к тому что это опять глюк компилятора VS2013. На ней при копировании вызывается optional(OtherType&& value, std::decay_t<compatible_t<OtherType>>*) с параметром шаблона optional<int> ???

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

1. заменить
optional& operator=(optional that) noexcept;
на
optional& operator=(const optional& that) noexcept;
optional& operator=(optional&& that) noexcept;

2. заменить (пишу на глаз)
std::decay_t<compatible_t<OtherType>>*
на
std::enable_if_t< compatible_v<OtherType> && !std::is_same_v<optional, std::decay_t<OtherType>> >*