我玩弄多態性可變參數lambda表達式上鏘,發現鏘並不喜歡這個這個遞歸多態C++ 1y lambda調用有什麼問題?
#include <iostream>
int main() {
auto append = [](auto &&cnt, auto &&me,
auto &&a, auto &&p1, auto &&...p) -> decltype(auto)
{
if(sizeof...(p) > cnt)
return me(++cnt, me, a << p1, p..., 0);
return a;
};
append(0, append, std::cout, 1, 2, 3, 4);
}
它旨在putput「1234」。一個0被添加到參數列表中(並且每次都會帶走前面的參數中的一個),並且計數器監視什麼時候我們需要停止,因爲我們會碰到一個虛擬的0
。
但鏘抱怨
fatal error: recursive template instantiation exceeded maximum depth of 256
在其backtract,大部分的功能框架是
main.cpp:6:20: note: in instantiation of function template specialization 'main()::<anonymous class>::operator()<int &, <lambda at main.cpp:4:19> &, std::basic_ostream<char> &, int &, int &, int &, int>' requested here
return me(++cnt, me, a << p1, p..., 0);
^
這似乎是一個自稱遞歸函數模板,我看不到無限模板實例化瘋狂。有人可以擺脫一些光?標準perpahs是否禁止像lambda一樣遞歸?
@dyp謝謝啊!請讓它成爲答案,我會接受 –