2011-10-26 17 views
15

¿Están aceptados los especificadores en la función typedefs?noexcept especificadores en la función typedefs

como en:

typedef void (*fptr)() noexcept; 

Intuitivamente, especificadores noexcept parece tener sentido, ya que permitirían algunas optimizaciones en el lado de la persona que llama.

Recibí una respuesta mixta de gcc 4.6.1.

typedef void (*fptr)() noexcept; 

resultados en: de error: ‘fptr’ declaran con una especificación de excepción

pero:

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

compila sin previo aviso.

Respuesta

8

sonido metálico da:

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

Esto está respaldado en el estándar C++ 11 en 15,4 [except.spec]/p2:

... An exception-specification shall not appear in a typedef declaration or alias-declaration.

+0

Gracias. Esto probablemente hace que se acepte la cláusula noexcept en el argumento de la plantilla sobre un error en gcc. – mirk

+2

No lo creo. [temp.param]/p4 dice que los parámetros que no son de tipo pueden ser un puntero a la función y no veo ninguna mención de las especificaciones de excepción en esa área. Y [except.spec]/p2 especifica que una especificación de excepción puede aparecer en un puntero para funcionar. –

+0

Gracias de nuevo. Estoy un poco desconcertado con este resultado, pero no tiene sentido discutir con el estándar. – mirk

Cuestiones relacionadas