C++14 でYコンビネータ

#include <iostream>

int
main(){
    auto Y = [](auto f){
        return [=](auto... args){
            return f(f, args...);
        };
    };
    auto f = Y([](auto f, int n)->int{ return n == 1 ? 1 : n + f(f, n-1); });
    std::cout << f(10) << std::endl;
    return 0;
}
/*
output:
55
*/

多相ラムダばんざーい。