次のコードはgcc-4.7.1でコンパイルされます。
struct X {};
template <class T = X, typename U>
void f(const U& m) {
}
int main() {
f<>(0);
}
ただし、これはそうではありません。
struct X {};
template <class T = X, typename U>
void f(const U& m) {
auto g = [] () {};
}
int main() {
f<>(0);
}
gcc-4.7.1の文句:
c.cpp: In function 'void f(const U&)':
c.cpp:5:15: error: no default argument for 'U'
だから私の質問は:関数テンプレートでデフォルト以外のパラメータの前にデフォルトのパラメータを置くことは正しいですか?はいの場合、2番目のものがコンパイルされないのはなぜですか?いいえの場合、なぜ最初のものがコンパイルされるのですか?C ++ 11標準はこの構文についてどのように述べていますか?