Когда я использую лязг (version 3.4 (trunk 194574)
) скомпилировать это:[[noreturn]] Указатель функции
typedef void (* FunctionThatNeverReturns [[ noreturn ]])();
я получаю это:
error: 'noreturn' attribute only applies to functions and methods
Что меня удивляет, так как он работал прекрасно с старше версия clang.
Так как я могу определить указатель на функцию [[ noreturn ]]
?
Мне нужно это, потому что я вызываю указатель функции внутри функции [[ noreturn ]]
, которая, очевидно, выдает предупреждение, если указатель функции не помечен как noreturn.
О, и это работает:
typedef void (* FunctionThatNeverReturns [[ gnu::noreturn ]])();
Но не существует никакой компилятор-независимое решение?
Вы не можете? Атрибуты не входят в число типов. –
@ R.MartinhoFernandes Так это когда-то работало из-за ошибки в clang? –
@ R.MartinhoFernandes: Согласно моему стандарту, это не так. И сообщение об ошибке соглашается. Это '[[noreturn]]' в частности, что не относится к типам. –