在回答不同的问题时,我找不到为什么不允许使用以下代码的原因.
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)
我提供的解释是编译器无法合法地表达模板扩展,但这更多是我的直觉而不是理由.关于为什么代码不应该编译,是否有明确的解释?