Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这是不是编译错误typedefint(*j)()抛出(A)? #包括 A类{}; typedef int(*j)()投掷(A); int f() { 我知道这不是这个问题的答案-_C++_Visual Studio 2012_Typedef - Fatal编程技术网

C++ 这是不是编译错误typedefint(*j)()抛出(A)? #包括 A类{}; typedef int(*j)()投掷(A); int f() { 我知道这不是这个问题的答案-

C++ 这是不是编译错误typedefint(*j)()抛出(A)? #包括 A类{}; typedef int(*j)()投掷(A); int f() { 我知道这不是这个问题的答案-,c++,visual-studio-2012,typedef,C++,Visual Studio 2012,Typedef,MSVC2010(我有)没有抛出任何错误,编译良好,工作正常 G++(GNU)说错误:“j”用异常规范声明 Clang说错误:typedefs中不允许使用异常规范 底线:MSVC中的编译器错误。异常规范不是函数类型的一部分。例如,您不能在其上重载;并且指向函数的指针不包含异常规范。正如@Aniket所说,他们的编译器接受该声明是Microsoft的错误。哪个编译器和哪个版本?Microsoft visual studio 2012因为您声称将在foo()的原型中抛出typename a对象,而实

MSVC2010(我有)没有抛出任何错误,编译良好,工作正常

G++(GNU)说
错误:“j”用异常规范声明

Clang说
错误:typedefs中不允许使用异常规范


底线:MSVC中的编译器错误。

异常规范不是函数类型的一部分。例如,您不能在其上重载;并且指向函数的指针不包含异常规范。正如@Aniket所说,他们的编译器接受该声明是Microsoft的错误。

哪个编译器和哪个版本?Microsoft visual studio 2012因为您声称将在
foo()
的原型中抛出
typename a
对象,而实际上尚未声明它,所以我看不出它怎么不是编译器错误。您应该为
a
或“预期”)获得一个未定义的符号。”错误。这可能是一个编译器错误MSVC是垃圾,我已经告诉过你了…叮当声抛出
baz.cpp:8:20:错误:typedefs中不允许使用异常规范这不是MSVC错误。MSVC故意选择忽略大多数异常规范:仅
throw()有一个效果。他们的语法分析器仍然必须接受它们,显然它太过接受它们。参见@ Sjoerd——故意的或其他的,这是一个错误。编译器没有正确地执行C++标准。任何偏离标准的都是bug @ Sjordd DelBror或其他;而且关于链接@ SJeRD微软有着悠久的历史。将bug作为特性进行投影!从一家“销售”其开发工具的公司来说,这并不是什么新鲜事。扩展不是偏离标准的。如果标准不需要诊断,编译器是完全符合的。
#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();
}