这是编译错误typedef int(* j)()throw(A)?

时间:2013-03-17 07:20:25

标签: c++ visual-studio-2012 typedef

#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中也说会有编译错误,但它会编译。 标准有变化吗?

2 个答案:

答案 0 :(得分:2)

我知道这不是这个问题的答案 -

MSVC 2010(我有)不会抛出错误,编译好并且没有打嗝工作

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

Clang说error: exception specifications are not allowed in typedefs

Bottomline:MSVC中的编译器错误。

答案 1 :(得分:0)

异常规范不是函数类型的一部分。例如,你不能超载它们;并且指向函数的指针不带有异常规范。正如@Aniket所说,他们的编译器接受该声明是微软的错误。