CD
Size: a a a
CD
V🇺
CD
#include <utility>
template <typename T>
struct combinator {
T t_;
constexpr combinator(T&& t) : t_(std::forward<T>(t)) {}
template <typename... Args>
constexpr auto operator () (Args&&... args) const
noexcept(noexcept(t_(*this, std::forward<Args>(args)...)))
-> decltype(t_(*this, std::forward<Args>(args)...))
{
return t_(*this, std::forward<Args>(args)...);
}
};
int main()
{
constexpr int x = 1;
constexpr auto fib = combinator{
[x] (auto const& self, int n) constexpr {
if (n <= 1)
return x;
return self(n - 1) + self(n - 2);
}
};
static_assert(fib(6) == 13 * x);
}
CD
V🇺
#include <utility>
template <typename T>
struct combinator {
T t_;
constexpr combinator(T&& t) : t_(std::forward<T>(t)) {}
template <typename... Args>
constexpr auto operator () (Args&&... args) const
noexcept(noexcept(t_(*this, std::forward<Args>(args)...)))
-> decltype(t_(*this, std::forward<Args>(args)...))
{
return t_(*this, std::forward<Args>(args)...);
}
};
int main()
{
constexpr int x = 1;
constexpr auto fib = combinator{
[x] (auto const& self, int n) constexpr {
if (n <= 1)
return x;
return self(n - 1) + self(n - 2);
}
};
static_assert(fib(6) == 13 * x);
}
CD
CD
CD
V🇺
CD
CD
std::function<int(int)>
EZ
V🇺
V🇺
CD
CD
V🇺
CD
V🇺