¿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 respuesta

Desde 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én

Me inclino a creer que este es un error de GCC y Clang, como. no es parte de un identificador válido.

Respuestas a la pregunta(1)

Su respuesta a la pregunta