// { dg-do compile } // { dg-options "-Wall" } // Copyright (C) 2003 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 2 Sep 2003 // PR 12037. struct X { int operator+(int); int operator-(int); int operator*(int); int operator/(int); int operator%(int); int operator>>(int); int operator<<(int); int operator&(int); int operator|(int); int operator^(int); int operator&&(int); int operator||(int); int operator==(int); int operator!=(int); int operator<(int); int operator<=(int); int operator>(int); int operator>=(int); int operator*(); int operator!(); int operator~(); int operator++(); int operator--(); int operator++(int); int operator--(int); int operator()(); int operator,(int); X *operator->(); operator int () const; int m; virtual ~X (); X &Foo (); }; struct Y : X { }; template void Foo (X &x) { x + I; x - I; x * I; x / I; x % I; x >> I; x << I; x & I; x | I; x && I; x || I; x == I; x != I; x < I; x <= I; x > I; x >= I; *x; !x; ~x; x++; x--; ++x; --x; x (); x, I; x->m; static_cast (x); dynamic_cast (x); reinterpret_cast (x.Foo ()); // { dg-error "invalid cast" } const_cast (x.Foo ()); // { dg-warning "not used" } reinterpret_cast (&x);// { dg-warning "no effect" "" } const_cast (x); // { dg-warning "no effect" "" } sizeof (x++); // { dg-warning "no effect" "" } __alignof__ (x++); // { dg-warning "no effect" "" } } template void Foo<4> (X&); // { dg-message "required" }