// RUN: %clang_cc1 -std=c++2a -x c++ -verify %s template concept C1 = sizeof(T) == 1; // expected-note@-1 2{{because 'sizeof(short) == 1' (2 == 1) evaluated to false}} // expected-note@-2 {{because 'sizeof(int) == 1' (4 == 1) evaluated to false}} template // expected-note {{because 'int' does not satisfy 'C1'}} using A = T; using a1 = A; // expected-error {{constraints not satisfied for alias template 'A' [with T = int]}} using a2 = A; template concept C2 = sizeof(T) == 2; // expected-note@-1 {{because 'sizeof(char) == 2' (1 == 2) evaluated to false}} template // expected-note@-1 2{{because 'short' does not satisfy 'C1'}} // expected-note@-2 {{because 'char' does not satisfy 'C2'}} using B = T1; using b1 = B; using b2 = B; // expected-error {{constraints not satisfied for alias template 'B' [with T1 = char, T2 = char]}} using b3 = B; // expected-error {{constraints not satisfied for alias template 'B' [with T1 = short, T2 = short]}} using b4 = B; // expected-error {{constraints not satisfied for alias template 'B' [with T1 = short, T2 = char]}} template concept C3 = (sizeof(T) + ...) == 12; // expected-note@-1 {{because 'sizeof(char [11]) == 12' (11 == 12) evaluated to false}} // expected-note@-2 {{because 'sizeof(char [10]) == 12' (10 == 12) evaluated to false}} // expected-note@-3 3{{because 'sizeof(int) == 12' (4 == 12) evaluated to false}} // expected-note@-4 6{{because 'sizeof(short) == 12' (2 == 12) evaluated to false}} template // expected-note@-1 {{because 'char [11]' does not satisfy 'C3'}} // expected-note@-2 {{because 'char [10]' does not satisfy 'C3'}} using C = T2; using c1 = C; using c2 = C; // expected-error@-1 {{constraints not satisfied for alias template 'C' [with T1 = char [12], T2 = char [11], T3 = char [10]]}} using c3 = C; // expected-error@-1 {{constraints not satisfied for alias template 'C' [with T1 = char [12], T2 = char [12], T3 = char [10]]}} template // expected-note@-1 {{because 'int' does not satisfy 'C3'}} // expected-note@-2 2{{and 'int' does not satisfy 'C3'}} // expected-note@-3 {{because 'short' does not satisfy 'C3'}} // expected-note@-4 5{{and 'short' does not satisfy 'C3'}} using D = int; using d1 = D; using d2 = D; // expected-error@-1 {{constraints not satisfied for alias template 'D' [with Ts = }} using d3 = D; // expected-error@-1 {{constraints not satisfied for alias template 'D' [with Ts = }} template concept C4 = sizeof(T) == 4; // expected-note@-1 3{{because 'sizeof(char) == 4' (1 == 4) evaluated to false}} template // expected-note@-1 2{{because 'char' does not satisfy 'C4'}} // expected-note@-2 {{and 'char' does not satisfy 'C4'}} using E = int; using e1 = E; using e2 = E; // expected-error {{constraints not satisfied for alias template 'E' [with Ts = ]}} using e3 = E; // expected-error {{constraints not satisfied for alias template 'E' [with Ts = ]}} using e4 = E<>; template constexpr bool is_same_v = false; template constexpr bool is_same_v = true; template concept Same = is_same_v; // expected-note {{because 'is_same_v' evaluated to false}} template T> // expected-note {{because 'Same' evaluated to false}} using F = T; using f1 = F; using f2 = F; // expected-error {{constraints not satisfied for alias template 'F' [with T = long]}} template concept OneOf = (is_same_v || ...); // expected-note@-1 2{{because 'is_same_v' evaluated to false}} // expected-note@-2 2{{and 'is_same_v' evaluated to false}} // expected-note@-3 {{because 'is_same_v' evaluated to false}} // expected-note@-4 {{and 'is_same_v' evaluated to false}} // expected-note@-5 {{and 'is_same_v' evaluated to false}} // expected-note@-6 3{{because 'is_same_v' evaluated to false}} // expected-note@-7 3{{and 'is_same_v' evaluated to false}} // expected-note@-8 2{{because 'is_same_v' evaluated to false}} // expected-note@-9 2{{and 'is_same_v' evaluated to false}} template T, OneOf U> // expected-note@-1 2{{because 'OneOf' evaluated to false}} // expected-note@-2 {{because 'OneOf' evaluated to false}} using G = T; using g1 = G; using g2 = G; // expected-error{{constraints not satisfied for alias template 'G' [with T = char, U = int]}} using g3 = G; // expected-error{{constraints not satisfied for alias template 'G' [with T = char [1], U = short]}} using g4 = G; // expected-error{{constraints not satisfied for alias template 'G' [with T = char, U = short]}} template... Ts> // expected-note@-1 2{{because 'OneOf' evaluated to false}} // expected-note@-2 {{and 'OneOf' evaluated to false}} using H = int; using h1 = H; // expected-error@-1 {{constraints not satisfied for alias template 'H' [with Ts = ]}} using h2 = H; // expected-error@-1 {{constraints not satisfied for alias template 'H' [with Ts = ]}} using h3 = H; template auto x> // expected-note@-1 {{because 'OneOf' evaluated to false}} using I = int; using i1 = I<1>; using i2 = I<'a'>; using i3 = I; // expected-error@-1 {{constraints not satisfied for alias template 'I' [with x = nullptr]}} template auto... x> // expected-note@-1 {{because 'OneOf' evaluated to false}} using J = int; using j1 = J<1, 'b'>; using j2 = J<'a', nullptr>; // expected-error@-1 {{constraints not satisfied for alias template 'J' [with x = <'a', nullptr>]}} template auto &x> // expected-error@-1 {{constrained placeholder types other than simple 'auto' on non-type template parameters not supported yet}} using K = int;