Noexcept спецификаторы в функции typedefs
Недействительны ли спецификаторы в функции typedefs?
как в:
typedef void (*fptr)() noexcept;
Интуитивно, noexcept спецификаторы, похоже, имеют смысл, поскольку они позволят некоторые оптимизации на стороне вызывающего абонента.
Я получил смешанный ответ от gcc 4.6.1.
typedef void (*fptr)() noexcept;
приводит к: error: 'fptr, объявленный спецификацией исключения
а
template<void (*FPtr)() noexcept>
struct A{};
компилируется без предупреждения.
Ответы
Ответ 1
clang дает:
test.cpp:1:25: error: exception specifications are not allowed in typedefs
typedef void (*fptr)() noexcept;
^
1 error generated.
Это резервное копирование в стандарте С++ 11 в 15.4 [except.spec]/p2:
... Спецификация исключения не должна появляться в объявлении typedef или объявление псевдонимов.