以下代码在 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'
所以我的问题是:在函数模板中将默认参数放在非默认参数之前是否正确?如果是,为什么第二个不编译?如果不是,为什么第一个编译?C++11 标准如何描述这种语法?