別の質問に答えている間、次のコードが許可されない理由を見つけることができませんでした。
template <typename F> void bar (F *f) { f->a = 0; }
int main () {
struct Foo { int a; } f = { 3 };
bar(&f); // fail
}
私が提供した説明は、コンパイラーにはテンプレート拡張を合法的に表現する方法がないというものでしたが、それは理由というよりも私の直感です。コードがコンパイルされるべきではない理由についての明確な説明はありますか?