当我使用clang(version 3.4 (trunk 194574))进行编译时:

typedef void (* FunctionThatNeverReturns [[ noreturn ]])();

我得到这个:
error: 'noreturn' attribute only applies to functions and methods

这让我感到惊讶,因为它与较旧版本的clang完美配合。

那么,如何定义指向[[ noreturn ]]函数的指针?

我需要这样做是因为我在[[ noreturn ]]函数内部调用了函数指针,如果该函数指针未标记为noreturn,则该函数显然会产生警告。

哦,这可行:
typedef void (* FunctionThatNeverReturns [[ gnu::noreturn ]])();

但是,没有独立于编译器的解决方案吗?

最佳答案

试试这个

typedef void (* FunctionThatNeverReturns)() [[ noreturn ]];

在原始文件中,放置说明符的位置使其适用于指针,而不适用于指向的对象。但是一个noreturn指针根本没有任何意义,您正在尝试为一个noreturn函数键入一个typedef指针。

演示:http://ideone.com/9mBR9x

10-04 10:09