Consideremos el siguiente código:¿La compilación de este código es un comportamiento estándar?
struct Undefined;
template <typename T>
void TemplateFunction()
{
Undefined obj;
}
int main()
{
return 0;
}
I era siempre la impresión de que las funciones de plantilla y los métodos de la plantilla (o métodos parte de una clase de plantilla), sólo se comprobará la sintaxis (a menos que se instancian) en cuyo caso el código anterior debe compilar.
El problema es que no se compila con Xcode (ver: 4.3.2, usando el compilador LLVM) y ahora me pregunto si el código no es estándar es decir, debe no compilar en un compilador conforme a el estándar C++ 03? El error de Xcode es:
variable tiene tipo incompleto "Indefinido"
Tenga en cuenta que en el código original, el objeto no definido es parte de la afirmación estática.
[Ideone parece permitir que compile.] (Http://ideone.com/PHpFw) (gcc-4.3.4) –
Compila bajo g ++ 4.6.3 en Linux, y no funciona bajo clang ++ (aunque si lo entiendo correctamente, Xcode usa clang ++ también) –
Como era de esperar, compila con gcc 4.7 y una captura de 4.8 (linux en x86) – juanchopanza