Rozważmy następujący kod:Czy kompilacja tego kodu jest zachowaniem standardowym?
struct Undefined;
template <typename T>
void TemplateFunction()
{
Undefined obj;
}
int main()
{
return 0;
}
Zawsze byłem pod wrażeniem, że funkcje szablonów i metody szablonu (lub metody częścią klasy szablonu) będą sprawdzane tylko dla składni (chyba że są one instancja), w którym to przypadku powyższy kod: powinien być kompilowany w postaci.
Problem w tym, że nie skompilować z Xcode (ver: 4.3.2, kompilator LLVM pomocą) i teraz zastanawiam się, czy powyższy kod jest niestandardowa czyli powinno nie skompilować na kompilator zgodny standard C++ 03? Błąd z Xcode jest:
zmienna ma niekompletne typu „Undefined”
Należy zauważyć, że w oryginalnym kodzie niezdefiniowany obiekt jest częścią statyczną twierdzenia.
[Ideone wydaje się pozwalać na kompilację.] (Http://ideone.com/PHpFw) (gcc-4.3.4) –
Kompiluje się pod g ++ 4.6.3 na Linuksie i nie jest pod kluczem ++ (chociaż jeśli rozumiem poprawnie, Xcode również używa clang ++) –
Zgodnie z oczekiwaniami, kompiluje się z gcc 4.7 i migawką 4.8 (linux na x86). – juanchopanza