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

jxh*_*jxh 0 c++

回答不同的问题时,我找不到为什么不允许使用以下代码的原因.

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

int main () {
    struct Foo { int a; } f = { 3 };
    bar(&f);                         // fail
}
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*eas 6

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

不确定这是否与使用STL算法的本地类完全相同,因为自从我提出问题以来标准已经改变.