brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 6744ce1 Raw
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