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 или объявление псевдонимов.