考慮下面的代碼:這個代碼標準行爲的編譯?
struct Undefined;
template <typename T>
void TemplateFunction()
{
Undefined obj;
}
int main()
{
return 0;
}
我一直的印象是模板函數和模板方法(或方法的模板類的一部分)將只對語法進行檢查(除非它們被實例化),在這種情況下,下上面的代碼應該編譯。
問題是,它不與Xcode的編譯(版本:4.3.2,使用LLVM編譯器)和現在我想知道上面的代碼是否是非標準即它應該不上編譯器符合編譯C++ 03標準?從Xcode的錯誤是:
變量具有不完整的類型「未定義」
注意的是,在原始代碼中,未定義的對象是靜態斷言的一部分。
[Ideone似乎允許它編譯。](http://ideone.com/PHpFw)(gcc-4.3.4) – 2012-08-12 00:42:23
它在Linux下的g ++ 4.6.3下編譯,並且它不在clang ++下(儘管如果我理解正確,Xcode也使用clang ++) – 2012-08-12 00:42:27
正如預期的那樣,它使用gcc 4.7和4.8快照編譯(linux上的x86) – juanchopanza 2012-08-12 00:46:05