2012-09-19 29 views
0

雖然answering a different question,我找不到爲什麼下面的代碼將被禁止的原因。是否允許在模板中使用本地定義的類型?

template <typename F> void bar (F *f) { f->a = 0; } 

int main() { 
    struct Foo { int a; } f = { 3 }; 
    bar(&f);       // fail 
} 

我提供的解釋是,編譯器就沒有辦法合法地表達模板擴張,但更多的是我的直覺比一個原因。有沒有一個明確的解釋,爲什麼代碼不應該編譯?

+0

@DavidRodríguez-dribeas:問題是我在查看C++ 11草案標準,原因是這是不允許的,並且找不到它。但是,我使用的是默認模式下的編譯器,而不是C++ 11模式。當我將C++ 11開關傳遞給編譯器時,代碼會進行編譯。 – jxh

回答

6

這在C++ 03中是明確禁止的,但在C++ 11中是合法的。

不知道這是否與Using local classes with STL algorithms完全相同,因爲自從我問這個問題後標準發生了變化。

+0

謝謝大衛。 – jxh

相關問題