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

            Bug ID: 94830
           Summary: Some concepts diagnostic messages are nondeterministic
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ppalka at gcc dot gnu.org
  Target Milestone: ---

$ cat testcase.C
template<typename T, typename R>
  concept c = __is_same(T, R);

template<typename T, typename R>
  requires c<T,R>
void foo() { }

void bar()
{
  foo<int, char>();
}

$ g++ -std=c++2a testcase.C
testcase.C: In function ‘void bar()’:
testcase.C:10:18: error: use of function ‘void foo() [with T = int; R = char]’
with unsatisfied constraints
   10 |   foo<int, char>();
      |                  ^
testcase.C:6:6: note: declared here
    6 | void foo() { }
      |      ^~~
testcase.C:6:6: note: constraints not satisfied
testcase.C: In instantiation of ‘void foo() [with T = int; R = char]’:
testcase.C:10:18:   required from here
testcase.C:2:11:   required for the satisfaction of ‘c<T, R>’ [with T = int; R
= char]
testcase.C:2:15: note:   ‘int’ is not the same as ‘char’
    2 |   concept c = __is_same(T, R);
      |               ^~~~~~~~~~~~~~~


The diagnostic pointing to line 2:11 will on some invocations say "[with T =
int; R = char]" and on other invocations say "[with R = char; T = int]"

Reply via email to