// RUN: %clang_cc1 -std=c++2a -x c++ %s -verify
constexpr bool is_same_v = false;
constexpr bool is_same_v<T, T> = true;
;
using identity_t = T;
// Type requirements
requires requires
;
requires requires // expected-note{{previous template declaration is here}}
;
requires requires // expected-error{{requires clause differs in template redeclaration}}
;
requires requires
;
requires requires
;
requires requires
;
requires requires // expected-note 2{{previous template declaration is here}}
;
requires requires // expected-error{{requires clause differs in template redeclaration}}
;
requires requires // expected-error{{requires clause differs in template redeclaration}}
;
requires requires
;
requires requires // expected-note{{previous template declaration is here}}
;
requires requires // expected-error{{requires clause differs in template redeclaration}}
;
requires requires
;
requires requires
;
// Expr requirements
requires requires // expected-note{{previous template declaration is here}}
;
requires requires // expected-error{{requires clause differs in template redeclaration}}
;
concept C1 = true;
requires requires
;
requires requires // expected-note{{previous template declaration is here}}
;
requires requires // expected-error{{requires clause differs in template redeclaration}}
;
requires requires // expected-note 2{{previous template declaration is here}}
;
requires requires // expected-error{{requires clause differs in template redeclaration}}
;
requires requires // expected-error{{requires clause differs in template redeclaration}}
;
requires requires
;
requires requires
;
requires requires // expected-note {{previous template declaration is here}}
;
requires requires // expected-error{{requires clause differs in template redeclaration}}
;
concept C2 = true;
requires requires
;
requires requires // expected-note{{previous template declaration is here}}
;
requires requires // expected-error{{requires clause differs in template redeclaration}}
;
// Nested requirements
requires requires
;
requires requires // expected-note{{previous template declaration is here}}
;
requires requires // expected-error{{requires clause differs in template redeclaration}}
;
// Parameter list
requires requires
;
requires // expected-note{{previous template declaration is here}}
;
requires // expected-error{{requires clause differs in template redeclaration}}
;
requires // expected-note 2{{previous template declaration is here}}
;
requires // expected-error{{requires clause differs in template redeclaration}}
;
requires // expected-error{{requires clause differs in template redeclaration}}
;
// Parameter names
requires
;
requires // expected-note 2{{previous template declaration is here}}
;
requires // expected-error{{requires clause differs in template redeclaration}}
;
requires // expected-error{{requires clause differs in template redeclaration}}
;
// Order of requirements
requires requires
;
requires requires // expected-note{{previous template declaration is here}}
;
requires requires // expected-error{{requires clause differs in template redeclaration}}
;