"noexcept指定子(と演算子)"について学ぶと、私は簡単なコードを書いた。 noexcept指定されC++ 17例外指定型システムはどのように機能しますか?
void asdf() noexcept {}
int main()
{
auto f = asdf;
std::cout << std::boolalpha << noexcept(f()) << std::endl;
}
プリントfalse
、でも機能「空自」:そして、私は、コードのこの部分ということに驚いています。
なぜこの神秘的な現象が起きているのかを調べるうちに、C++ 17の「例外指定型システム」 - P0012R1が見つかりました。
この(提案された)提案によれば、C++ 17以降、 noexcept
は関数型の一部ですので、上記のコードは印刷されますtrue
?
そしてもう一つ、this質問の1行で:
std::function<void() noexcept> f
noexcept
指定は、C++ 14または11 C++ 17で意図したとおり、このコード作業は意志を無視でいるようですか?
g ++ 'nostcept(f())'の '-std = C++ 1z'(ただし、clangは' false'を返します)では 'true'を返します。 – Holt
余分な楽しみのために、 'auto f = asdf;'を 'void(* f)()noexcept = asdf;'に変更してください。現在、GCCは 'false'を出力し、clangは' true'を出力します。 – hvd
@Holt情報ありがとうございます。私はMSVCを使用しています( 'false'を返します)。何が違うのでしょうか?これはg ++やC++のバグですか?14以前の標準では、 'noexcept'型のシステムについて何も指定されていませんか? – Gear