#include <iostream>
class A {};
typedef int (*j)() throw(A);
int f()
{
std::cout << "function f" << std::endl;
return 0;
}
int main()
{
j y = f;
y();
}
すべてのサイトで、Stroustrup もコンパイル エラーが発生すると言っていますが、コンパイルされます。規格に変更はありますか?
#include <iostream>
class A {};
typedef int (*j)() throw(A);
int f()
{
std::cout << "function f" << std::endl;
return 0;
}
int main()
{
j y = f;
y();
}
すべてのサイトで、Stroustrup もコンパイル エラーが発生すると言っていますが、コンパイルされます。規格に変更はありますか?
私はこれがこの質問に対する答えではないことを知っています -
MSVC 2010(私が持っている)はエラーをスローせず、正常にコンパイルされ、問題なく動作します
G++(GNU) 言うerror: 'j' declared with an exception specification
クラン 言うerror: exception specifications are not allowed in typedefs
結論: MSVC のコンパイラのバグ。
例外指定は、関数の型の一部ではありません。たとえば、それらをオーバーロードすることはできません。また、関数へのポインターには例外指定がありません。@Aniket が言うように、コンパイラがその宣言を受け入れるのは Microsoft のバグです。