Este programa da como resultado un punto muerto de codicia no deseada:
struct float4x4 {};
class C
{
float4x4 M();
};
float4x4 ::C::M()
{
return float4x4{};
}
: 8: 1: error: ningún miembro llamado 'C' en 'float4x4'; ¿quiso decir simplemente 'C'?
float4x4 :: C :: M ()
^ ~~~~~~~~~~~
Que se puede 'arreglar' usando el tipo de retorno final:
auto ::C::M() -> float4x4
{}
ahora todo bien.
Entonces, supongo que no podemos calificar completamente el nombre de la clase cuando usamos la sintaxis de declarador de tipo retorno-encabezado.
c++
parsing
methods
fully-qualified-naming
v.oddou
fuente
fuente
::
, supongo que no hay otra manera.::C
parte parece una solución alternativa para algún otro problema. De lo contrario, podría haber sido simplementeC
(como sugiere el compilador;)Respuestas:
Puede poner corchetes para desambiguar:
Realmente no puedo decirte qué regla hace que esto esté bien, aunque no está sin los corchetes, aunque probé con gcc y clang (ambos
-pedantic
). Preferiría el tipo de retorno final.fuente