16

noexcept 指定子は関数 typedef で受け入れられますか?

次のように:

 typedef void (*fptr)()  noexcept;

直観的には、noexcept 指定子は、呼び出し側でいくつかの最適化を許可するため、理にかなっているように見えます。

gcc 4.6.1 からさまざまな回答が得られました。

 typedef void (*fptr)()  noexcept;

結果: エラー: 'fptr' が例外仕様で宣言されました

しかし:

template<void (*FPtr)()  noexcept>
struct A{};

警告なしでコンパイルします。

4

1 に答える 1

9

クランは次のように与えます:

test.cpp:1:25: error: exception specifications are not allowed in typedefs
typedef void (*fptr)()  noexcept;
                        ^
1 error generated.

これは、15.4 [except.spec]/p2 の C++11 標準でバックアップされています。

...例外仕様は typedef 宣言または別名宣言に現れてはなりません。

于 2011-10-26T15:43:15.140 に答える