1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 3 template <int A, int B> void foo() { 4 (void)(A == A); // expected-warning {{self-comparison always evaluates to true}} 5 (void)(A == B); 6 } 7 template <int A, int B> struct S1 { 8 void foo() { 9 (void)(A == A); // expected-warning {{self-comparison always evaluates to true}} 10 (void)(A == B); 11 } 12 }; 13 14 template <int A, int B> struct S2 { 15 template <typename T> T foo() { 16 (void)(A == A); // expected-warning {{self-comparison always evaluates to true}} 17 (void)(A == B); 18 } 19 }; 20 21 struct S3 { 22 template <int A, int B> void foo() { 23 (void)(A == A); // expected-warning {{self-comparison always evaluates to true}} 24 (void)(A == B); 25 } 26 }; 27 28 template <int A> struct S4 { 29 template <int B> void foo() { 30 (void)(A == A); // expected-warning {{self-comparison always evaluates to true}} 31 (void)(A == B); 32 } 33 }; 34 35 const int N = 42; 36 template <int X> void foo2() { 37 (void)(X == N); 38 (void)(N == X); 39 } 40 41 void test() { 42 foo<1, 1>(); 43 S1<1, 1> s1; s1.foo(); 44 S2<1, 1> s2; s2.foo<void>(); 45 S3 s3; s3.foo<1, 1>(); 46 S4<1> s4; s4.foo<1>(); 47 foo2<N>(); 48 } 49