次のコードを検討してください。
struct Undefined;
template <typename T>
void TemplateFunction()
{
Undefined obj;
}
int main()
{
return 0;
}
テンプレート関数とテンプレート メソッド (またはテンプレート クラスの一部のメソッド) は、(インスタンス化されていない限り) 構文のみがチェックされ、その場合は上記のコードをコンパイルする必要があるという印象を常に受けていました。
問題は、Xcode (ver: 4.3.2、LLVM コンパイラを使用) でコンパイルできないことです。上記のコードが非標準であるかどうか、つまり、C++03 標準に準拠するコンパイラでコンパイルするべきではないかどうか疑問に思っています。 ? Xcode からのエラーは次のとおりです。
変数には不完全な型「未定義」があります
元のコードでは、未定義のオブジェクトは静的アサーションの一部であることに注意してください。