Está permitido en caso de que desee declarar una función que devuelve un objeto de esa clase directamente después de la clase declaración, por ejemplo:
#include <iostream>
inline class AAA
{
public:
AAA()
{
// Nothing
}
AAA(const AAA& _Param)
{
std::cout << "Calling Copy Constructor of AAA\n";
}
}A()
{
AAA a;
return a;
};
int main()
{
A();
return 0;
}
También se debe notar los errores del compilador (o advertencias) que aparecen en otros casos ilegales, como declarar una variable en lugar de A()
, también observe que el compilador indica que ignora la palabra clave inline
si no declaró ninguna función.
Espero que sea útil.
Editar: Para el comentario de Eonil
Si usted está hablando acerca de su código de seguridad en la pregunta, entonces es el mismo caso que veo, el compilador le dará una advertencia: 'inline ' : ignored on left of 'AAA' when no variable is declared
sin embargo, si se utiliza el código en mi respuesta, pero sustituya A()
con una variable, B
por ejemplo, se generará un error de compilación: 'B' : 'inline' not permitted on data declarations
Así nos encontramos con que el compilador no hizo ningún error ingenio h aceptando tales declaraciones, ¿qué hay de tratar de escribir inline double;
por sí mismo?Se generará una advertencia: 'inline ' : ignored on left of 'double' when no variable is declared
Ahora cómo sobre esta declaración:
double inline d()
{
}
se da ninguna advertencia o errores, que es exactamente lo mismo que:
inline double d()
{
}
desde la precedencia de inline
no es importante en absoluto.
El primer código (en su totalidad la respuesta) es similar a la escritura:
class AAA
{
// Code
};
inline class AAA A()
{
// Code
}
que es legal.
Y, de otra manera, se puede escribir como:
class AAA
{
// Code
};
class AAA inline A()
{
// Code
}
Se podría ser aliviado si ve el primer código (en su totalidad la respuesta) se escribe así:
#include <iostream>
class AAA
{
// Code
} inline A()
{
// Code
};
Pero son lo mismo, ya que no hay importancia para la precedencia de inline
.
Espero que sea claro y convincente.
función en línea tiene sentido .... pero la clase en línea ?? – mpen
"¿Qué es esto?" - Algo que no existe en C++ estándar. El especificador 'inline' es para funciones, no para clases. Es posible que haya tropezado con un error en el compilador de Clang C++. –
Agregué la etiqueta 'clang', no pude encontrar nada en el rastreador de errores, podría valer la pena abrir uno (siempre puede enviar un correo a cfe-dev [at] cs.uiuc.edu de antemano si no está seguro). Si esto está en la línea 2.9, probablemente querrán arreglarlo pronto. –