(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
cpp1z/
constexpr-if27.C
// PR c++/86969
// { dg-do compile { target c++17 } }

auto compose = [](auto... fs) {
    if constexpr (sizeof...(fs) == 0) {
        return [](auto x) { return x; };
    } else {
        auto fn = [](auto self, auto f, auto... fs) {
            if constexpr (sizeof...(fs) == 0) return f;
            else return [=](auto x) { 
                return f(self(self, fs...)(x));
            };
        };
        return fn(fn, fs...);
    }
};

static_assert(compose(
        [](auto x) { return x * 3; },
        [](auto x) { return x + 1; },
        [](auto x) { return x / 2; }
    )(6) == 12);