lambda is tuple
理解したのでメモ
#include <iostream> auto stack = [](auto... xs) { return [=](auto access) { return access(xs...); }; }; auto size = [](auto xs) { return xs([=](auto... z) { return sizeof...(z); }); }; auto push = [](auto xs, auto x) { return xs([=](auto... z) { return [=](auto access) { return access(x, z...); }; }); }; auto pop = [](auto xs) { return xs([=](auto, auto... z) { return [=](auto access) { return access(z...); }; }); }; auto top = [](auto xs) { return xs([=](auto v, auto...) { return v; }); }; int main() { auto s = push(push(push(stack(), 1), "lambda is tuple"), 3.14); std::cout << size(s) << std::endl; std::cout << top(s) << ", " << top(pop(s)) << ", " << top(pop(pop(s))) << std::endl; }
c++ - Is there a name for this tuple-creation idiom? - Stack Overflow