Следующий фрагмент кода компилируется на 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'
Итак, мой вопрос: ставит ли параметры по умолчанию параметры, отличные от параметров по умолчанию, в шаблоне функции? Если да, то почему вторая не компилируется? Если нет, то почему первый компилируется? Как стандарт С++ 11 говорит об этом синтаксисе?