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では合法的なコードです。

私がその質問をしてから標準が変更されたため、これがSTLアルゴリズムでのローカルクラスの使用の正確な複製であるかどうかはわかりません。

于 2012-09-19T21:54:25.400 に答える