在下面的代碼段上不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標準對此語法如何說明?
http://stackoverflow.com/questions/2447458/default-template-arguments-for-function-templates – Andrew 2012-07-27 09:25:21
@Andrew,你給的帖子太長了。你能指出哪個答案說的是否在非默認參數之前放置默認參數是正確的? – 2012-07-27 09:31:56
@icando:標準中沒有*禁止*將函數模板的默認模板參數放在任何地方。只有* class *模板受到限制。 – 2012-07-27 09:43:30