2012-12-23 9 views
25

Come deve essere interpretato il prototipo della funzione membro sottostante in C++ 11?È 'auto a_class :: f (...) -> T const' ambiguo nella grammatica?

class C { 
public: 
    auto f(...) -> T const; 
} 

Sembrerebbe a me che potrebbe essere sia una funzione membro const della classe C, o di una funzione membro non-const che restituisce un valore di tipo const T.

So che potrei basta scrivere la funzione come

T const f(...); 

o

T f(...) const; 

Tuttavia, voglio essere coerente con h Come dichiaro funzioni, quindi ho deciso di utilizzare il nuovo C++ 11 auto f(...) -> RetType ovunque.

risposta

29

Il tipo di ritorno trailing è dopo qualifiche di cv- e ref di una funzione membro non statico. Ciò significa che l'esempio nella domanda è lo stesso di T const f(...);.

§8.4.1 [dcl.fct.def.general] p2

Il dichiaratore in una funzione definizione avrà la forma

D1 (parametro-dichiarazione-clausola) cv-qualificazione-seq opt ref-qualificazione opt specifica-eccezione opt specificatore-attributo-seq opt trailing-r eturn-tipo opt

per dichiarare una funzione const membro, devi scrivere auto f(...) const -> T const;.

+1

+1 (come se ne avete bisogno) :-) –

+0

@KerrekSB Mi chiedo come cambierà il modello di voto se i nomi delle persone che chiedono e di rispondere siano tenuti nascosti. –

Problemi correlati