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

            Bug ID: 103760
           Summary: Invalid expression inside lambda inside compound
                    requirement causes an error instead of concept
                    satisfaction failure
           Product: gcc
           Version: 10.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jacek.olczyk98 at gmail dot com
  Target Milestone: ---

When using a lambda expression in a requires clause compound requirement,
placing an expression invalid for some type T inside the lambda causes a
compile error during instantiation, instead of the expected behavior of causing
the concept to not be satisfied.
On clang, the behavior is as expected.

This happens on 10.2, where I discovered it, as well as on trunk. 
Here is the code: https://godbolt.org/z/EnK5G8Yjf

To save a click, the example code is:

template<typename T>
concept Concept = requires (T x) {
    {[](){ return T::foo; }()};
};
static_assert(!Concept<int>);



The expected behavior is to pass the static_assert.
The actual error is:

<source>: In lambda function:
<source>:3:22: error: 'foo' is not a member of 'int'
    3 |     {[](){ return T::foo; }()};
      |                      ^~~

Reply via email to