2011-10-26 8 views
15

Gli specificatori nox sono accettati nella funzione typedef?specificatori noexcept in typedef di funzione

come in:

typedef void (*fptr)() noexcept; 

Intuitivamente, prescrittori noexcept sembrano avere un senso dal momento che permetterebbero alcune ottimizzazioni al fianco del chiamante.

Ho ottenuto una risposta mista da gcc 4.6.1.

typedef void (*fptr)() noexcept; 

risultati in: errore: ‘fptr’ dichiarate con una specifica eccezione

ma:

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

compila senza preavviso.

risposta

8

clang dà:

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

questo è sostenuto nello standard C++ 11 a 15,4 [except.spec]/p2:

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

+0

Grazie. Questo probabilmente rende accettabile la clausola noexcept nell'argomento template sopra un bug in gcc? – mirk

+2

Io non la penso così. [temp.param]/p4 dice che i parametri non di tipo possono essere un puntatore alla funzione e non vedo alcuna menzione delle specifiche di eccezione in quell'area. E [except.spec]/p2 dice specificatamente che una caratteristica di eccezione può apparire su un puntatore per funzionare. –

+0

Grazie ancora. Sono un po 'perplesso da questo risultato, ma non ha senso discutere con lo standard. – mirk

Problemi correlati