当我使用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 ]])();
但是没有独立于编译器的解决方案吗?
答案 0 :(得分:0)
试试这个
typedef void (* FunctionThatNeverReturns)() [[ noreturn ]];
在原始文件中,放置说明符使其适用于指针而不是指向的对象。但是一个noreturn指针完全没有意义,你正在尝试输入一个指向noreturn函数的指针。
答案 1 :(得分:0)
此版本似乎可以按预期进行编译:
[[noreturn]] void AFunctionThatDoesNotReturn() {}
using FunctionThatNeverReturns = std::add_pointer_t<decltype(AFunctionThatDoesNotReturn)>;
但是编译器验证失败,实际上我们将一个不可返回的函数指针指向了指针:https://ideone.com/YAo73S
答案 2 :(得分:0)
如评论中所述,该标准显然被禁止。