c++ - ¿Es ''auto a_class:: f(…)-> T const'' ambiguo en la gramática?
c++11 trailing-return-type (1)
¿Cómo debe interpretarse el prototipo de la función de miembro a continuación en C ++ 11?
class C {
public:
auto f(...) -> T const;
}
Me parece que podría ser una función miembro constante de la clase C, o una función miembro no constante que devuelve un valor constante de tipo T.
Sé que podría escribir la función como
T const f(...);
o
T f(...) const;
Sin embargo, quiero ser coherente con la forma en que declaro las funciones, por lo que decidí usar el nuevo C ++ 11 auto f(...) -> RetType
forma en todas partes.
El tipo trailing-return viene después de los calificadores cv y ref de una función miembro no estática. Esto significa que el ejemplo en la pregunta es el mismo que T const f(...);
.
§8.4.1 [dcl.fct.def.general] p2
El declarador en una función-definición tendrá la forma
D1
( parámetro-declaración-cláusula ) cv-qualifier-seq opt ref-qualifier opt excepción-especificación opt atributo-specifier-seq opt trailing-return-type opt
Para declarar una función miembro const
, escribiría auto f(...) const -> T const;
.