Os literais numéricos definidos pelo usuário podem ser imediatamente seguidos por um ponto? [duplicado]
Esta pergunta já tem uma resposta aqui:
Erro de compilação ao usar um membro de um literal definido pelo usuário 1 respostaDesde o C ++ 11, foi possível criarLiterais definidos pelo usuário. Como esperado, é possível retornar estruturas complexas de tais literais. No entanto, ao tentar usar operadores como123_foo.bar()
:
struct foo {
int n;
int bar() const { return n; }
};
constexpr foo operator ""_foo(unsigned long long test)
{
return foo{ static_cast<int>(test) };
}
int main() {
return 123_foo.bar();
}
GCC e Clang rejeitam, dizendo que não conseguem encontrar umoperator""_foo.bar
. MSVC aceita. Se eu escrever123_foo .bar()
, todos os três compiladores aceitam
Quem está bem aqui? É123_foo.bar()
já é válido?
Algumas informações extras:
Todos os três aceitamliterais de stringO problema existe parastd::chrono
literais tambémEstou inclinado a acreditar que este é um bug do GCC e Clang, como.
não faz parte de um identificador válido.