нет, кроме спецификаторов в функции typedefs - PullRequest
15 голосов
/ 26 октября 2011

Допустимы ли спецификаторы noexcept в функции typedefs?

как в:

 typedef void (*fptr)()  noexcept;

Интуитивно понятно, что никакие кроме спецификаторов, похоже, не имеют смысла, поскольку они позволили бы некоторые оптимизации на стороне вызывающего.

Я получил смешанный ответ от gcc 4.6.1.

 typedef void (*fptr)()  noexcept;

результат: ошибка: 'fptr' объявлен со спецификацией исключения

но:

template<void (*FPtr)()  noexcept>
struct A{};

компилируется без предупреждения.

1 Ответ

8 голосов
/ 26 октября 2011

clang дает:

test.cpp:1:25: error: exception specifications are not allowed in typedefs
typedef void (*fptr)()  noexcept;
                        ^
1 error generated.

Это резервное копирование в стандарте C ++ 11 в 15.4 [кроме.spec] / p2:

... An спецификация исключений не должна появляться в объявлении typedef или объявлении псевдонима .

...