C ++ стандартизирует поведение std :: необязательный при std :: min и std :: max?

У меня не установлен совсем новый компилятор, чтобы получить подсказку о том, что в итоге std::optional семантика будет. Но в C ++ 14 следующее:

#include <experimental/optional>
#include <algorithm>

int main()
{
using oint = std::experimental::optional<int>;
int x = std::max(1, 2);
auto oy = oint{3};
auto z = std::max(x, oy);
}

не компилируется. Теперь, в будущем, я ожидал / надеюсь, что z мог получить 3 в этом случае; и если oy = oint{} затем z мог достать 2,

Является ли что-то вроде того, что я ожидал, стандартизированным в C ++ 17 или предложенным для стандартизации позже? В качестве альтернативы, является неопределимости стандартизировано (вроде как в C ++ 14)?

Примечание. Мотивация здесь, возможно, заключается в том, чтобы реализовать что-то самостоятельно для кода до C ++ 17; если что-то актуальное планируется стандартизировать, я постараюсь соответствовать этому.

-6

Решение

Что-то вроде того, что я ожидал, стандартизировано в C ++ 17

Нет.

, или предложено для стандартизации позже?

Нет такого предложения ни в одном из рассылки.

Хотя, конечно, есть много простых обходных путей, поэтому есть мало причин для такого предложения:

oy ? std::max(x,*oy) : x;
x < oy ? *oy : x
*std::max(oint(x), oy)
*std::max<oint>(x, oy)
*std::max(oy, {x})
std::max(x, oy.value_or(x))

Там, наверное, другие. Первые два не могут дать вам висячую ссылку, последние четыре могут.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]