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

C++ 是否允许在模板中使用本地定义的类型?,c++,C++,然而,我找不到为什么下面的代码会被禁止的原因 template <typename F> void bar (F *f) { f->a = 0; } int main () { struct Foo { int a; } f = { 3 }; bar(&f); // fail } 模板空栏(F*F){F->a=0;} int main(){ 结构Foo{int a;}f={3}; bar(&f);//失

然而,我找不到为什么下面的代码会被禁止的原因

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

int main () {
    struct Foo { int a; } f = { 3 };
    bar(&f);                         // fail
}
模板空栏(F*F){F->a=0;}
int main(){
结构Foo{int a;}f={3};
bar(&f);//失败
}

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

这在C++03中是明确不允许的,但在C++11中是合法的


不确定这是否与的完全相同,因为自从我提出这个问题以来,标准已经改变。

这在C++03中被明确禁止,但在C++11中是法律代码


不确定这是否是的精确副本,因为自从我提出这个问题以来,标准已经发生了变化。

@DavidRodríguez dribeas:问题是我在查看C++11标准草案时,出于不允许的原因,找不到它。但是,我使用的是编译器的默认模式,而不是C++11模式。当我将C++11开关传递给编译器时,代码确实会编译。@DavidRodríguez dribeas:问题是我查看C++11标准草案的原因是它不被允许,并且找不到它。但是,我使用的是编译器的默认模式,而不是C++11模式。当我将C++11开关传递给编译器时,代码会编译。