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
}
我提供的解释是,编译器就没有办法合法地表达模板扩张,但更多的是我的直觉比一个原因。有没有一个明确的解释,为什么代码不应该编译?
@DavidRodríguez-dribeas:问题是我在查看C++ 11草案标准,原因是这是不允许的,并且找不到它。但是,我使用的是默认模式下的编译器,而不是C++ 11模式。当我将C++ 11开关传递给编译器时,代码会进行编译。 – jxh