-6

我没有安装最新的编译器来暗示最终的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);
}

不编译。现在,在未来,我希望/希望z3在这种情况下得到解决;如果oy = oint{}那时 z可以得到2

是像我期望的那样在 C++17 中标准化,还是稍后提出标准化?或者,不可定义性是否标准化(就像它在 C++14 中一样)?

注意:这里的动机可能是我自己为 C++17 之前的代码实现一些东西;如果计划将相关的东西标准化,我会尝试与之匹配。

4

1 回答 1

3

就像我期望的在 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))

可能还有其他人。前两个不能给你一个悬而未决的参考,最后四个可以。

于 2017-08-02T23:08:49.743 回答