[[noreturn]]函数指针

时间:2013-11-15 16:47:45

标签: c++ c++11 clang function-pointers noreturn

当我使用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 ]])();

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

3 个答案:

答案 0 :(得分:0)

试试这个

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

在原始文件中,放置说明符使其适用于指针而不是指向的对象。但是一个noreturn指针完全没有意义,你正在尝试输入一个指向noreturn函数的指针。

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

答案 1 :(得分:0)

此版本似乎可以按预期进行编译:

[[noreturn]] void AFunctionThatDoesNotReturn() {}
using FunctionThatNeverReturns = std::add_pointer_t<decltype(AFunctionThatDoesNotReturn)>;

但是编译器验证失败,实际上我们将一个不可返回的函数指针指向了指针:https://ideone.com/YAo73S

答案 2 :(得分:0)

如评论中所述,该标准显然被禁止。