1 // { dg-options "-Wuseless-cast" } 2 3 template<typename T> tmpl_f1(T & t)4 void tmpl_f1(T& t) 5 { 6 (int)(t); 7 static_cast<int>(t); 8 reinterpret_cast<int>(t); 9 10 (int*)(&t); 11 const_cast<int*>(&t); 12 static_cast<int*>(&t); 13 reinterpret_cast<int*>(&t); 14 15 (int&)(t); 16 const_cast<int&>(t); 17 static_cast<int&>(t); 18 reinterpret_cast<int&>(t); 19 } 20 21 template<typename T> tmpl_f2(T t)22 void tmpl_f2(T t) 23 { 24 (int&)(t); 25 const_cast<int&>(t); 26 static_cast<int&>(t); 27 reinterpret_cast<int&>(t); 28 } 29 30 struct A { }; 31 32 template<typename T> tmpl_f3(T & t)33 void tmpl_f3(T& t) 34 { 35 (A)(t); 36 static_cast<A>(t); 37 38 (A*)(&t); 39 const_cast<A*>(&t); 40 static_cast<A*>(&t); 41 reinterpret_cast<A*>(&t); 42 dynamic_cast<A*>(&t); 43 44 (A&)(t); 45 const_cast<A&>(t); 46 static_cast<A&>(t); 47 reinterpret_cast<A&>(t); 48 dynamic_cast<A&>(t); 49 } 50 51 template<typename T> tmpl_f4(T t)52 void tmpl_f4(T t) 53 { 54 (A&)(t); 55 const_cast<A&>(t); 56 static_cast<A&>(t); 57 reinterpret_cast<A&>(t); 58 dynamic_cast<A&>(t); 59 } 60 61 A prvalue(); 62 f()63void f() 64 { 65 int n; 66 67 (int)(n); // { dg-warning "useless cast" } 68 static_cast<int>(n); // { dg-warning "useless cast" } 69 reinterpret_cast<int>(n); // { dg-warning "useless cast" } 70 71 (int*)(&n); // { dg-warning "useless cast" } 72 const_cast<int*>(&n); // { dg-warning "useless cast" } 73 static_cast<int*>(&n); // { dg-warning "useless cast" } 74 reinterpret_cast<int*>(&n); // { dg-warning "useless cast" } 75 76 int& m = n; 77 78 (int&)(m); // { dg-warning "useless cast" } 79 const_cast<int&>(m); // { dg-warning "useless cast" } 80 static_cast<int&>(m); // { dg-warning "useless cast" } 81 reinterpret_cast<int&>(m); // { dg-warning "useless cast" } 82 83 tmpl_f1(m); 84 85 (int&)(n); // { dg-warning "useless cast" } 86 const_cast<int&>(n); // { dg-warning "useless cast" } 87 static_cast<int&>(n); // { dg-warning "useless cast" } 88 reinterpret_cast<int&>(n); // { dg-warning "useless cast" } 89 90 tmpl_f2(n); 91 92 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 93 (int&&)(42); 94 static_cast<int&&>(42); 95 96 (A&&)(prvalue()); 97 const_cast<A&&>(prvalue()); 98 static_cast<A&&>(prvalue()); 99 #endif 100 101 A a; 102 103 (A)(a); // { dg-warning "useless cast" } 104 static_cast<A>(a); // { dg-warning "useless cast" } 105 106 (A*)(&a); // { dg-warning "useless cast" } 107 const_cast<A*>(&a); // { dg-warning "useless cast" } 108 static_cast<A*>(&a); // { dg-warning "useless cast" } 109 reinterpret_cast<A*>(&a); // { dg-warning "useless cast" } 110 dynamic_cast<A*>(&a); // { dg-warning "useless cast" } 111 112 A& b = a; 113 114 (A&)(b); // { dg-warning "useless cast" } 115 const_cast<A&>(b); // { dg-warning "useless cast" } 116 static_cast<A&>(b); // { dg-warning "useless cast" } 117 static_cast<A&>(b); // { dg-warning "useless cast" } 118 dynamic_cast<A&>(b); // { dg-warning "useless cast" } 119 120 tmpl_f3(b); 121 122 (A&)(a); // { dg-warning "useless cast" } 123 const_cast<A&>(a); // { dg-warning "useless cast" } 124 static_cast<A&>(a); // { dg-warning "useless cast" } 125 reinterpret_cast<A&>(a); // { dg-warning "useless cast" } 126 dynamic_cast<A&>(a); // { dg-warning "useless cast" } 127 128 tmpl_f4(a); 129 } 130