Este programa resulta em um beco sem saída indesejável:
struct float4x4 {};
class C
{
float4x4 M();
};
float4x4 ::C::M()
{
return float4x4{};
}
: 8: 1: erro: nenhum membro chamado 'C' em 'float4x4'; você quis dizer simplesmente 'C'?
float4x4 :: C :: M ()
^ ~~~~~~~~~~~
Que pode ser 'corrigido' usando o tipo de retorno à direita:
auto ::C::M() -> float4x4
{}
agora tudo de bom.
Então, presumo que não podemos qualificar totalmente o nome da classe ao usar a sintaxe do declarador de cabeçalho-retorno-tipo?
c++
parsing
methods
fully-qualified-naming
v.oddou
fonte
fonte
::
, suponho que não haja outra maneira.::C
peça parece uma solução alternativa para outro problema. Caso contrário, poderia ter sido simplesmenteC
(como o compilador sugere;)Respostas:
Você pode colocar colchetes para desambiguar:
Eu realmente não posso dizer qual regra faz com que isso funcione, embora não fique sem os colchetes, embora eu tenha testado com gcc e clang (ambos
-pedantic
). Eu preferiria o tipo de retorno à direita.fonte