在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
}
我提供的解释是编译器无法合法地表达模板扩展,但这更多是我的直觉而不是理由。关于为什么代码不应该编译,是否有明确的解释?
答案 0 :(得分:6)
这在C ++ 03中是明确禁止的,但在C ++ 11中是合法代码。
不确定这是否与Using local classes with STL algorithms完全相同,因为自从我提出这个问题后标准发生了变化。