Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/cpp0x/decltype-call3.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
// Testcase for N3276 and operator overloading // { dg-require-effective-target c++11 } struct A; struct B { A operator()(int); A operator[](int); A operator=(int); A operator+=(int); A operator-=(int); A operator*=(int); A operator/=(int); A operator^=(int); A operator&=(int); A operator|=(int); A operator<<=(int); A operator>>=(int); }; A operator-(B); A operator+(B); A operator*(B); A operator&(B); A operator!(B); A operator~(B); A operator++(B); A operator--(B); A operator+(B,B); A operator-(B,B); A operator*(B,B); A operator/(B,B); A operator%(B,B); A operator^(B,B); A operator&(B,B); A operator|(B,B); A operator<(B,B); A operator>(B,B); A operator,(B,B); A operator<<(B,B); A operator>>(B,B); A operator==(B,B); A operator->*(B,B); #define TRY(E) static_cast<decltype(E)*>(0) template <class B> void f() { B b; TRY(b(0)); TRY(b[0]); TRY(b=0); TRY(b+=0); TRY(b-=0); TRY(b*=0); TRY(b/=0); TRY(b^=0); TRY(b&=0); TRY(b|=0); TRY(b<<=0); TRY(b>>=0); TRY(-b); TRY(+b); TRY(*b); TRY(&b); TRY(!b); TRY(~b); TRY(++b); TRY(--b); TRY(b+b); TRY(b-b); TRY(b*b); TRY(b/b); TRY(b%b); TRY(b^b); TRY(b&b); TRY(b|b); TRY(b>b); TRY(b<b); TRY((b,b)); TRY(b<<b); TRY(b>>b); TRY(b==b); TRY(b->*b); } int main() { B b; TRY(b(0)); TRY(b[0]); TRY(b=0); TRY(b+=0); TRY(b-=0); TRY(b*=0); TRY(b/=0); TRY(b^=0); TRY(b&=0); TRY(b|=0); TRY(b<<=0); TRY(b>>=0); TRY(-b); TRY(+b); TRY(*b); TRY(&b); TRY(!b); TRY(~b); TRY(++b); TRY(--b); TRY(b+b); TRY(b-b); TRY(b*b); TRY(b/b); TRY(b%b); TRY(b^b); TRY(b&b); TRY(b|b); TRY(b>b); TRY(b<b); TRY((b,b)); TRY(b<<b); TRY(b>>b); TRY(b==b); TRY(b->*b); f<B>(); }