6
#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 もコンパイル エラーが発生すると言っていますが、コンパイルされます。規格に変更はありますか?

4

2 に答える 2

2

私はこれがこの質問に対する答えではないことを知っています -

MSVC 2010(私が持っている)はエラーをスローせず、正常にコンパイルされ、問題なく動作します

G++(GNU) 言うerror: 'j' declared with an exception specification

クラン 言うerror: exception specifications are not allowed in typedefs

結論: MSVC のコンパイラのバグ。

于 2013-03-17T08:41:59.930 に答える
0

例外指定は、関数の型の一部ではありません。たとえば、それらをオーバーロードすることはできません。また、関数へのポインターには例外指定がありません。@Aniket が言うように、コンパイラがその宣言を受け入れるのは Microsoft のバグです。

于 2013-03-17T16:08:18.140 に答える