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 所说,他们的编译器接受该声明是微软的一个错误。

于 2013-03-17T16:08:18.140 回答