https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122884

--- Comment #1 from C Runge <rungecc at gmail dot com> ---
A more detailed reproducer(https://godbolt.org/z/YTcsc4z8b):

```cxx
struct demux_t {
    template <class Fn, class... Slots>
    static constexpr auto operator()(Fn&& fn, Slots&&... slots) 
    noexcept(noexcept(
        [fn{fn}, ... slots{slots}]<class Self, class... Args>(
                   this Self&&,
                   Args&&... args) 
                //    noexcept(noexcept(fn(slots(args...)...))) // crash
                   -> decltype(auto)
                   requires requires { fn(slots(args...)...); }
        { return fn(slots(args...)...); }
    )) -> decltype(auto)
    requires requires {
        [fn{fn}, ... slots{slots}]<class Self, class... Args>(
                   this Self&&,
                   Args&&... args) 
                //    noexcept(noexcept(fn(slots(args...)...))) // crash
                   -> decltype(auto)
                   requires requires { fn(slots(args...)...); }
        { return fn(slots(args...)...); };
    }
    {
        return [fn{fn}, ... slots{slots}]<class Self, class... Args>(
                   this Self&&,
                   Args&&... args) 
                //    noexcept(noexcept(fn(slots(args...)...))) // crash
                   -> decltype(auto)
                //    requires requires { fn(slots(args...)...); } // crash
        { return fn(slots(args...)...); };
    }
} static constexpr demux{};

static_assert(demux([](auto x, auto y) { return x + y; },
                    [](auto...) { return 1; },
                    [](auto...) { return 2; })(1, 2) == 3);

```

each comment could trigger this ICE, with similar backtrace.

Reply via email to