最終的なstd::optional
のセマンティクスのヒントを得るために、非常に新しいコンパイラがインストールされていません。しかし、C++ 14では、次のようになります。C++はstd :: minとstd :: maxの下でstd :: optionalの動作を標準化していますか?
#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、または後で標準化のために提案しましたか?あるいは、undefinabilityが標準化されています(C++ 14のようなものです)?
注:ここでの動機は、おそらく自分自身を、C++プリコードのために実装している可能性があります。関連するものが標準化される予定の場合、私はそれにマッチしようとします。
これはどのように混乱しているのか分かりません。 ['std :: max'](http://en.cppreference.com/w/cpp/algorithm/max)は、2つのパラメータが同じ型を持つと想定しています。 – Justin
['std :: optional'](http://en.cppreference.com/w/cpp/utility/optional/operator_cmp)には比較演算子があります。あなたは 'std :: max(oint {x}、oy)' – Justin
...を実行するか、最悪の選択肢として、 'std :: max(x、oy.value_or(std :: numeric_limits :: min())); '。 –
dfri