是否允许在模板中使用本地定义的类型?

时间:2012-09-19 21:53:30

标签: c++

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
}

我提供的解释是编译器无法合法地表达模板扩展,但这更多是我的直觉而不是理由。关于为什么代码不应该编译,是否有明确的解释?

1 个答案:

答案 0 :(得分:6)

这在C ++ 03中是明确禁止的,但在C ++ 11中是合法代码。

不确定这是否与Using local classes with STL algorithms完全相同,因为自从我提出这个问题后标准发生了变化。