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

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

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

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

R>Ну это понятно почему — в цепочке присутствуют два последовательных пользовательских преобразования — оператор приведения Container и преобразующий конструктор optional, тогда как стандарт позволяет только одно. Тут нужна либо специализированная конвертирующая функция, либо явное преобразование к int:


R>
R>const std::optional<int> v5(int(cont5));
R>


Ну вот мне пока не очень понятно . Почему в той же ситуации стандартный std::optional работает как и ожидается ? Там как-то хитро объявляется преобразующий конструктор optional (optional(U&&), если я правильно вас понял. И потом:
const std::optional<int> v5(int(cont5));

совсем не тоже самое что:
const std::optional<int> v5(cont5);
Re[4]: Оператор приведения
Здравствуйте, rg45, Вы писали:

R>Ну это понятно почему — в цепочке присутствуют два последовательных пользовательских преобразования — оператор приведения Container и преобразующий конструктор optional, тогда как стандарт позволяет только одно. Тут нужна либо специализированная конвертирующая функция, либо явное преобразование к int:


R>
R>const std::optional<int> v5(int(cont5));
R>


Ну вот мне пока не очень понятно . Почему в той же ситуации стандартный std::optional работает как и ожидается ? Там как-то хитро объявляется преобразующий конструктор optional(U&&), если я правильно вас понял. И потом:
const std::optional<int> v5(int(cont5));

совсем не тоже самое что:
const std::optional<int> v5(cont5);