0

回答另一个问题时,我找不到以下代码被禁止的原因。

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

int main () {
    struct Foo { int a; } f = { 3 };
    bar(&f);                         // fail
}

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

4

1 回答 1

6

这在 C++03 中是明确禁止的,但在 C++11 中是合法代码。

不确定这是否与Using local classes with STL algorithms完全相同,因为自从我问这个问题以来标准已经改变。

于 2012-09-19T21:54:25.400 回答