2012-09-19 24 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

相关问题