这个编译错误是typepedef int (*j)() throw(A)吗?

Is this compile error typedef int (*j)() throw(A)?

本文关键字:throw 错误 typepedef int 编译      更新时间:2023-10-16
#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

Clang说error: exception specifications are not allowed in typedefs

底线:MSVC中的编译器错误

异常说明不是函数类型的一部分。例如,你不能让他们负担过重;而且指向函数的指针不携带异常说明。正如@Aniket所说,这是微软的一个bug,他们的编译器接受了这个声明。