Si consideri il seguente codice:La compilazione di questo comportamento standard del codice?
struct Undefined;
template <typename T>
void TemplateFunction()
{
Undefined obj;
}
int main()
{
return 0;
}
ero sempre sotto l'impressione che le funzioni dei modelli e metodi di template (o metodi parte di una classe template) saranno controllati solo per la sintassi (a meno che non siano istanziati), nel qual caso il codice sopra deve compilare.
Il problema è che non viene compilato con Xcode (ver: 4.3.2, utilizzando il compilatore LLVM) e ora sto chiedendo se il codice di cui sopra è non standard ossia deve non compila su un compilatore conforme al lo standard C++ 03? L'errore da Xcode è:
variabile ha tipo incompleto "Definire"
noti che nel codice originale, l'oggetto non definito è parte del asserzione statica.
[Ideone sembra consentirgli di compilare.] (Http://ideone.com/PHpFw) (gcc-4.3.4) –
Si compila sotto g ++ 4.6.3 su Linux, e non in clang ++ (anche se capisco che Xcode usa anche clang ++) –
Come previsto, compila con gcc 4.7 e uno snapshot 4.8 (linux su x86) – juanchopanza