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

Сообщение Re[2]: Оператор приведения от 05.07.2019 9:23

Изменено 05.07.2019 9:38 Videoman

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

Вот, постарался как можно более компактно изобразить проблему.

Строчка 489 — не правильно разрешается перегрузка в случае std::optional, пока не могу понять почему. Буду очень признателен если вы посоветуете как наиболее минимальными изменениями можно это пофиксить.
Не спрашивайте почему используется собственная реализация std::optional, но хотелось бы, по возможности, сейчас использовать именно ее .

P.S. Я в курсе что моя реализация optional сильно урезана и во многом не соответствует стандарту, но от нее много и не требуется. По ряду причин, я не могу использовать сторонние библиотеки (boost и т.д.) и пока-что, на данной итерации, мы все еще используем VS2013, где нет optional. Со стандартным optional из поставки VS2017 ваш пример работает. В будущем после переходе на C++17 все заработает, но нужно что-то предпринять сейчас.
Re[2]: Оператор приведения
Здравствуйте, rg45, Вы писали:

Вот, постарался как можно более компактно изобразить проблему.

Строчка 489 — не правильно разрешается перегрузка в случае std::optional, пока не могу понять почему. Буду очень признателен если вы посоветуете как наиболее минимальными изменениями можно это пофиксить.
Не спрашивайте почему используется собственная реализация std::optional, но хотелось бы, по возможности, сейчас использовать именно ее .

Самом деле проблема глубже, на мой взгляд. Любой класс внутри контейнера который принимает один шаблонный параметр без explicit, будет пытаться вызывать конструктор инициализации вместо оператора приведения типа контейнера. Если я ошибаюсь поправьте меня.

P.S. Я в курсе что моя реализация optional сильно урезана и во многом не соответствует стандарту, но от нее много и не требуется. По ряду причин, я не могу использовать сторонние библиотеки (boost и т.д.) и пока-что, на данной итерации, мы все еще используем VS2013, где нет optional. Со стандартным optional из поставки VS2017 ваш пример работает. В будущем после переходе на C++17 все заработает, но нужно что-то предпринять сейчас.