¿Pueden los literales numéricos definidos por el usuario ser seguidos inmediatamente por un punto? [duplicar]
Esta pregunta ya tiene una respuesta aquí:
Error de compilación al usar un miembro de un literal definido por el usuario 1 respuestaDesde C ++ 11, ha sido posible crearLiterales definidos por el usuario. Como se esperaba, es posible devolver estructuras complejas de tales literales. Sin embargo, cuando se intenta utilizar 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 y Clang lo rechazan, diciendo que no pueden encontrar unoperator""_foo.bar
. MSVC lo acepta. Si en cambio escribo123_foo .bar()
, los tres compiladores lo aceptan
¿Quién está aquí? Es123_foo.bar()
Alguna vez valido?
Alguna información extra:
Los tres lo aceptan porliterales de cadenaEl problema existe parastd::chrono
literales tambiénMe inclino a creer que este es un error de GCC y Clang, como.
no es parte de un identificador válido.