gcc/testsuite/g++.dg/concepts/diagnostic5.C: In function ‘void bar()’:         
gcc/testsuite/g++.dg/concepts/diagnostic5.C:42:13: error: use of function ‘void foo() [with T = char]’ with unsatisfied constraints
   42 |   foo<char>(); // { dg-error "use of" }                                                                                    
      |             ^                                                                                                              
gcc/testsuite/g++.dg/concepts/diagnostic5.C:37:8: note: declared here                                                              
   37 |   void foo() { }                                                                                                           
      |        ^~~                                                                                                                 
gcc/testsuite/g++.dg/concepts/diagnostic5.C:37:8: note: constraints not satisfied                                                  
gcc/testsuite/g++.dg/concepts/diagnostic5.C: In instantiation of ‘void foo() [with T = char]’:                                     
gcc/testsuite/g++.dg/concepts/diagnostic5.C:42:13:   required from here                                                            
gcc/testsuite/g++.dg/concepts/diagnostic5.C:37:8:   required by the constraints of ‘template<class T>  requires (c1<T>) || (c2<T>) || ((c3<T>) || (c4<T>)) || (c5<T>) void foo()gcc/testsuite/g++.dg/concepts/diagnostic5.C:31:49: note: no operand of the disjunction is satisfied                                                                              
   31 |   requires (c1<T> || c2<T>) || (c3<T> || c4<T>) || c5<T> // { dg-message "49: no operand" }                                                                              
      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~                                                                                                                 
gcc/testsuite/g++.dg/concepts/diagnostic5.C:31:13: note: the operand ‘c1<T>’ is unsatisfied because                                                                              
   31 |   requires (c1<T> || c2<T>) || (c3<T> || c4<T>) || c5<T> // { dg-message "49: no operand" }                                                                              
      |            ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                                                                                                 
gcc/testsuite/g++.dg/concepts/diagnostic5.C:5:11:   required for the satisfaction of ‘c1<char>gcc/testsuite/g++.dg/concepts/diagnostic5.C:5:16:   in requirements                                                                                                              
gcc/testsuite/g++.dg/concepts/diagnostic5.C:5:36: note: the required type ‘typename T::blah’ is invalid, because                                                                 
    5 |   concept c1 = requires { typename T::blah; };                                                                                                                           
      |                           ~~~~~~~~~^~~~~~~~                                                                                                                              
gcc/testsuite/g++.dg/concepts/diagnostic5.C:5:36: error: char’ is not a class, struct, or union type                                                                            
gcc/testsuite/g++.dg/concepts/diagnostic5.C:31:22: note: the operand ‘c2<T>’ is unsatisfied because                                                                              
   31 |   requires (c1<T> || c2<T>) || (c3<T> || c4<T>) || c5<T> // { dg-message "49: no operand" }                                                                              
      |            ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                                                                                                 
gcc/testsuite/g++.dg/concepts/diagnostic5.C:10:11:   required for the satisfaction of ‘c2<char>gcc/testsuite/g++.dg/concepts/diagnostic5.C:10:16:   in requirements with ‘char xgcc/testsuite/g++.dg/concepts/diagnostic5.C:10:33: note: the required expression ‘* x’ is invalid, because                                                                       
   10 |   concept c2 = requires (T x) { *x; };                                                                                                                                   
      |                                 ^~                                                                                                                                       
gcc/testsuite/g++.dg/concepts/diagnostic5.C:10:33: error: invalid type argument of unary ‘*’ (have ‘char’)                                                                       
gcc/testsuite/g++.dg/concepts/diagnostic5.C:31:33: note: the operand ‘c3<T>’ is unsatisfied because                                                                              
   31 |   requires (c1<T> || c2<T>) || (c3<T> || c4<T>) || c5<T> // { dg-message "49: no operand" }                                                                              
      |            ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~                                                                                                                 
gcc/testsuite/g++.dg/concepts/diagnostic5.C:16:11:   required for the satisfaction of ‘c3<char>gcc/testsuite/g++.dg/concepts/diagnostic5.C:16:38: note: no operand of the disjunction is satisfied                                                                              
   16 |   concept c3 = __is_same(T, const T) || __is_same(T, int);                                                                                                               
      |                ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~                                                                                                                
gcc/testsuite/g++.dg/concepts/diagnostic5.C:16:16: note: the operand ‘__is_same(T, const T)’ is unsatisfied because                                                              
   16 |   concept c3 = __is_same(T, const T) || __is_same(T, int);                                                                                                               
      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                                                                                                
gcc/testsuite/g++.dg/concepts/diagnostic5.C:16:11:   required for the satisfaction of ‘c3<char>gcc/testsuite/g++.dg/concepts/diagnostic5.C:16:16: note: char’ is not the same as ‘const char’                                                                                
   16 |   concept c3 = __is_same(T, const T) || __is_same(T, int);                                                                                                               
      |                ^~~~~~~~~~~~~~~~~~~~~                                                                                                                                     
gcc/testsuite/g++.dg/concepts/diagnostic5.C:16:41: note: the operand ‘__is_same(T, int)’ is unsatisfied because                                                                  
   16 |   concept c3 = __is_same(T, const T) || __is_same(T, int);                                                                                                               
      |                ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~                                                                                                                
gcc/testsuite/g++.dg/concepts/diagnostic5.C:16:11:   required for the satisfaction of ‘c3<char>gcc/testsuite/g++.dg/concepts/diagnostic5.C:16:41: note: char’ is not the same as ‘int’                                                                                       
   16 |   concept c3 = __is_same(T, const T) || __is_same(T, int);                                                                                                               
      |                                         ^~~~~~~~~~~~~~~~~                                                                                                                
gcc/testsuite/g++.dg/concepts/diagnostic5.C:31:42: note: the operand ‘c4<T>’ is unsatisfied because                                                                              
   31 |   requires (c1<T> || c2<T>) || (c3<T> || c4<T>) || c5<T> // { dg-message "49: no operand" }                                                                              
      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~                                                                                                                 
gcc/testsuite/g++.dg/concepts/diagnostic5.C:21:11:   required for the satisfaction of ‘c4<char>gcc/testsuite/g++.dg/concepts/diagnostic5.C:21:16:   in requirements with ‘char xgcc/testsuite/g++.dg/concepts/diagnostic5.C:21:54: note: nested requirement ‘(c2<const T> || c2<volatile T>)’ is not satisfied, because                                          
   21 |   concept c4 = requires (T x) { requires c2<const T> || c2<volatile T>; };                                                                                               
      |                                          ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~                                                                                                   
gcc/testsuite/g++.dg/concepts/diagnostic5.C:21:54: note: no operand of the disjunction is satisfied                                                                              
gcc/testsuite/g++.dg/concepts/diagnostic5.C:21:42: note: the operand ‘c2<const T>’ is unsatisfied because                                                                        
   21 |   concept c4 = requires (T x) { requires c2<const T> || c2<volatile T>; };                                                                                               
      |                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                                                                                   
gcc/testsuite/g++.dg/concepts/diagnostic5.C:10:11:   required for the satisfaction of ‘c2<const T>gcc/testsuite/g++.dg/concepts/diagnostic5.C:10:16:   in requirements with ‘const char xgcc/testsuite/g++.dg/concepts/diagnostic5.C:10:33: note: the required expression ‘* x’ is invalid                                                                                
   10 |   concept c2 = requires (T x) { *x; };                                                                                                                                   
      |                                 ^~                                                                                                                                       
gcc/testsuite/g++.dg/concepts/diagnostic5.C:21:57: note: the operand ‘c2<volatile T>’ is unsatisfied because                                                                     
   21 |   concept c4 = requires (T x) { requires c2<const T> || c2<volatile T>; };                                                                                               
      |                                          ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~                                                                                                   
gcc/testsuite/g++.dg/concepts/diagnostic5.C:10:11:   required for the satisfaction of ‘c2<volatile T>gcc/testsuite/g++.dg/concepts/diagnostic5.C:10:16:   in requirements with ‘volatile char xgcc/testsuite/g++.dg/concepts/diagnostic5.C:10:33: note: the required expression ‘* x’ is invalid                                                                                
   10 |   concept c2 = requires (T x) { *x; };                                                                                                                                   
      |                                 ^~                                                                                                                                       
gcc/testsuite/g++.dg/concepts/diagnostic5.C:31:52: note: the operand ‘c5<T>’ is unsatisfied because                                                                              
   31 |   requires (c1<T> || c2<T>) || (c3<T> || c4<T>) || c5<T> // { dg-message "49: no operand" }                                                                              
      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~                                                                                                                 
gcc/testsuite/g++.dg/concepts/diagnostic5.C:26:11:   required for the satisfaction of ‘c5<char>gcc/testsuite/g++.dg/concepts/diagnostic5.C:26:16:   in requirements with ‘char xgcc/testsuite/g++.dg/concepts/diagnostic5.C:26:36: note: & x’ does not satisfy return-type-requirement, because                                                                 
   26 |   concept c5 = requires (T x) { { &x } -> c1; };                                                                                                                         
      |                                    ^                                                                                                                                     
gcc/testsuite/g++.dg/concepts/diagnostic5.C:26:35: error: deduced expression type does not satisfy placeholder constraints                                                       
   26 |   concept c5 = requires (T x) { { &x } -> c1; };                                                                                                                         
      |                                 ~~^~~~~~~~~~                                                                                                                             
gcc/testsuite/g++.dg/concepts/diagnostic5.C:26:35: note: constraints not satisfied                                                                                               
gcc/testsuite/g++.dg/concepts/diagnostic5.C:5:11:   required for the satisfaction of ‘c1<char*>gcc/testsuite/g++.dg/concepts/diagnostic5.C:5:16:   in requirements                                                                                                              
gcc/testsuite/g++.dg/concepts/diagnostic5.C:5:36: note: the required type ‘typename T::blah’ is invalid, because                                                                 
    5 |   concept c1 = requires { typename T::blah; };                                                                                                                           
      |                           ~~~~~~~~~^~~~~~~~                                                                                                                              
gcc/testsuite/g++.dg/concepts/diagnostic5.C:5:36: error: char*’ is not a class, struct, or union type                                                                           
cc1plus: note: set -fconcepts-diagnostics-depth= to at least 5 for more detail