66 lines · cpp
1// RUN: %clang_cc1 -Wno-unused -fsyntax-only %s -verify2 3struct A {4 void operator*();5 void operator+();6 void operator-();7 void operator!();8 void operator~();9 void operator&();10 void operator++();11 void operator--();12};13 14struct B { };15 16template<typename T, typename U>17void dependent(T t, T* pt, T U::* mpt, T(&ft)(), T(&at)[4]) {18 *t;19 +t;20 -t;21 !t;22 ~t;23 &t;24 ++t;25 --t;26 27 *pt;28 +pt;29 -pt; // expected-error {{invalid argument type 'T *' to unary expression}}30 !pt;31 ~pt; // expected-error {{invalid argument type 'T *' to unary expression}}32 &pt;33 ++pt;34 --pt;35 36 *mpt; // expected-error {{indirection requires pointer operand ('T U::*' invalid)}}37 +mpt; // expected-error {{invalid argument type 'T U::*' to unary expression}}38 -mpt; // expected-error {{invalid argument type 'T U::*' to unary expression}}39 !mpt;40 ~mpt; // expected-error {{invalid argument type 'T U::*' to unary expression}}41 &mpt;42 ++mpt; // expected-error {{cannot increment value of type 'T U::*'}}43 --mpt; // expected-error {{cannot decrement value of type 'T U::*'}}44 45 *ft;46 +ft;47 -ft; // expected-error {{invalid argument type 'T (*)()' to unary expression}}48 !ft;49 ~ft; // expected-error {{invalid argument type 'T (*)()' to unary expression}}50 &ft;51 ++ft; // expected-error {{cannot increment value of type 'T ()'}}52 --ft; // expected-error {{cannot decrement value of type 'T ()'}}53 54 *at;55 +at;56 -at; // expected-error {{invalid argument type 'T *' to unary expression}}57 !at;58 ~at; // expected-error {{invalid argument type 'T *' to unary expression}}59 &at;60 ++at; // expected-error {{cannot increment value of type 'T[4]'}}61 --at; // expected-error {{cannot decrement value of type 'T[4]'}}62}63 64// Make sure we only emit diagnostics once.65template void dependent(A t, A* pt, A B::* mpt, A(&ft)(), A(&at)[4]);66