Почему std::expected перегружает все квалификаторы ссылочного типа для многих своих функций-членов? [дубликат] ⇐ C++

Программы на C++. Форум разработчиков
Anonymous
Почему std::expected перегружает все квалификаторы ссылочного типа для многих своих функций-членов? [дубликат]

Сообщение Anonymous »

Рассмотрим, например, определение std::expected::value. Имеет 4 перегрузки:

Код: Выделить всё

constexpr T& value() &;
constexpr const T& value() const&;
constexpr T&& value() &&;
constexpr const T&& value() const&&;
Несколько других функций-членов перегружаются таким же образом.
Я работаю над классом, который будет иметь аналогичный API, поэтому мне нужно чтобы понять: почему это необходимо?
Почему необходимы перегрузки move-reference поверх const и не- перегрузки для обычных ссылок?
Иногда в стандарте перечисляются подобные прототипы только для того, чтобы на самом деле требовалось меньше перегрузок. Но стандартная библиотека MSVC на самом деле имеет разные перегрузки для каждой комбинации, например, соответствующие std::expected::value.

Подробнее здесь: https://stackoverflow.com/questions/788 ... -of-its-me

Вернуться в «C++»