C ++ 11のローカルクラスの使用法に変更はありますか?
C ++ 03では、ローカルクラスをテンプレート引数として使用できないようです(覚えています)。
このコードを考えてみましょう。
template<typename T> void f(const T&) {}
//Note : S is a local class defined inside main()
int main() { struct S{}; f(S()); } //I want template argument to be deduced.
ただし、コンパイルエラー(C ++ 03モード)が発生し、(ideone)と表示されます。
prog.cpp:4:エラー:「f(main():: S)」の呼び出しに一致する関数がありません</ p>
ただし、C ++ 11モード( ideone )でコンパイルすると正常にコンパイルされます。これは私には理にかなっています。そうしないと、ラムダが機能しません。したがって、ローカルクラスの使用法には少なくともこの変更があると思います。私は正しいですか?ローカルクラスに関するその他の変更点は何ですか?
読者が自分自身を比較できるように、また将来の参考のために、標準(C++03とC++11の両方)から関連するテキストを引用してください。