在回答另一个问题时,我找不到以下代码被禁止的原因。
template <typename F> void bar (F *f) { f->a = 0; }
int main () {
struct Foo { int a; } f = { 3 };
bar(&f); // fail
}
我提供的解释是编译器无法合法地表达模板扩展,但这更多是我的直觉而不是原因。关于为什么代码不应该编译有明确的解释吗?
这在 C++03 中是明确禁止的,但在 C++11 中是合法代码。
不确定这是否与Using local classes with STL algorithms完全相同,因为自从我问这个问题以来标准已经改变。