| // { dg-do compile { target c++2a } } |
| |
| template<typename T> |
| inline constexpr bool foo_v = false; |
| |
| template<typename T> |
| concept foo = (bool)(foo_v<T> | foo_v<T&>); |
| |
| template<typename... Ts> |
| requires (foo<Ts> && ...) |
| void |
| bar() // { dg-message "with Ts = .int, char... evaluated to .false." } |
| { } |
| |
| template<int> |
| struct S { }; |
| |
| template<int... Is> |
| requires (foo<S<Is>> && ...) |
| void |
| baz() // { dg-message "with Is = .2, 3, 4... evaluated to .false." } |
| { } |
| |
| void |
| baz() |
| { |
| bar<int, char>(); // { dg-error "no match" } |
| baz<2,3,4>(); // { dg-error "no match" } |
| } |