Сообщение Re[4]: Оператор приведения от 05.07.2019 9:51
Изменено 05.07.2019 9:53 Videoman
Re[4]: Оператор приведения
Здравствуйте, rg45, Вы писали:
R>Ну это понятно почему — в цепочке присутствуют два последовательных пользовательских преобразования — оператор приведения Container и преобразующий конструктор optional, тогда как стандарт позволяет только одно. Тут нужна либо специализированная конвертирующая функция, либо явное преобразование к int:
R>
Ну вот мне пока не очень понятно . Почему в той же ситуации стандартный std::optional работает как и ожидается ? Там как-то хитро объявляется преобразующий конструктор optional (optional(U&&), если я правильно вас понял.
R>Ну это понятно почему — в цепочке присутствуют два последовательных пользовательских преобразования — оператор приведения Container и преобразующий конструктор optional, тогда как стандарт позволяет только одно. Тут нужна либо специализированная конвертирующая функция, либо явное преобразование к int:
R>
R>const std::optional<int> v5(int(cont5));
R>
Ну вот мне пока не очень понятно . Почему в той же ситуации стандартный std::optional работает как и ожидается ? Там как-то хитро объявляется преобразующий конструктор optional (optional(U&&), если я правильно вас понял.
Re[4]: Оператор приведения
Здравствуйте, rg45, Вы писали:
R>Ну это понятно почему — в цепочке присутствуют два последовательных пользовательских преобразования — оператор приведения Container и преобразующий конструктор optional, тогда как стандарт позволяет только одно. Тут нужна либо специализированная конвертирующая функция, либо явное преобразование к int:
R>
Ну вот мне пока не очень понятно . Почему в той же ситуации стандартный std::optional работает как и ожидается ? Там как-то хитро объявляется преобразующий конструктор optional (optional(U&&), если я правильно вас понял. И потом:
совсем не тоже самое что:
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);