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

            Bug ID: 93154
           Summary: can't constrain captured functions to be invocable
                    with lambda arg - unknown "constraints not satisfied"
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: db0451 at gmail dot com
  Target Milestone: ---

Surely the below should work? I'm currently trying to go overboard with
declaring constraints, and that `requires` clause - while perhaps a bit
superfluous - seems totally correct... right?

However, it doesn't compile, citing "constraints not satisfied" - and yet
notably not bothering to mention WHICH constraint supposedly has the problem!

g++-10 (Debian 10-20191217-1) 10.0.0 20191217 (experimental) [trunk revision
279456]

```
#include <concepts>

void f1(int) {}

template <typename... Fs> requires (sizeof...(Fs) > 0)
auto
make_lambda(Fs... fs)
{
        return [fs...]
               <typename Arg>
               requires (std::invocable<Fs, Arg> && ...)
               (Arg a)
        {
                (fs(a), ...);
        };
}

auto
main() -> int
{
        auto const lambda = make_lambda(&f1);
        lambda(42);

        return 0;
}
```

...results in the error:

>>>
test5.cpp: In function ‘int main()’:
test5.cpp:22:11: error: no match for call to ‘(const make_lambda(Fs ...) [with
Fs = {void (*)(int)}]::<lambda(Arg)>) (int)’
   22 |  lambda(42);
      |           ^
test5.cpp:9:9: note: candidate: ‘make_lambda(Fs ...) [with Fs = {void
(*)(int)}]::<lambda(Arg)> [with Arg = int]’
    9 |  return [fs...]
      |         ^
test5.cpp:9:9: note: constraints not satisfied
>>>

preprocessed source:

Reply via email to