1*476a497fSLuca Di Sera struct Foo { 2*476a497fSLuca Di Sera // Those are copy-assignment operators 3*476a497fSLuca Di Sera bool operator=(const Foo&); 4*476a497fSLuca Di Sera bool operator=(Foo&); 5*476a497fSLuca Di Sera bool operator=(volatile Foo&); 6*476a497fSLuca Di Sera bool operator=(const volatile Foo&); 7*476a497fSLuca Di Sera bool operator=(Foo); 8*476a497fSLuca Di Sera 9*476a497fSLuca Di Sera // Those are not copy-assignment operators 10*476a497fSLuca Di Sera template<typename T> 11*476a497fSLuca Di Sera bool operator=(const T&); 12*476a497fSLuca Di Sera bool operator=(const bool&); 13*476a497fSLuca Di Sera bool operator=(char&); 14*476a497fSLuca Di Sera bool operator=(volatile unsigned int&); 15*476a497fSLuca Di Sera bool operator=(const volatile unsigned char&); 16*476a497fSLuca Di Sera bool operator=(int); 17*476a497fSLuca Di Sera }; 18*476a497fSLuca Di Sera 19*476a497fSLuca Di Sera // Positive-check that the recognition works for templated classes too 20*476a497fSLuca Di Sera template <typename T> 21*476a497fSLuca Di Sera class Bar { 22*476a497fSLuca Di Sera bool operator=(const Bar&); 23*476a497fSLuca Di Sera bool operator=(Bar<T>&); 24*476a497fSLuca Di Sera bool operator=(volatile Bar&); 25*476a497fSLuca Di Sera bool operator=(const volatile Bar<T>&); 26*476a497fSLuca Di Sera bool operator=(Bar); 27*476a497fSLuca Di Sera }; 28*476a497fSLuca Di Sera 29*476a497fSLuca Di Sera // RUN: c-index-test -test-print-type --std=c++11 %s | FileCheck %s 30*476a497fSLuca Di Sera // CHECK: StructDecl=Foo:1:8 (Definition) [type=Foo] [typekind=Record] [isPOD=0] 31*476a497fSLuca Di Sera // CHECK: CXXMethod=operator=:3:10 (copy-assignment operator) [type=bool (const Foo &)] [typekind=FunctionProto] [canonicaltype=bool (const Foo &)] [canonicaltypekind=FunctionProto] [resulttype=bool] [resulttypekind=Bool] [args= [const Foo &] [LValueReference]] [isPOD=0] [isAnonRecDecl=0] 32*476a497fSLuca Di Sera // CHECK: CXXMethod=operator=:4:10 (copy-assignment operator) [type=bool (Foo &)] [typekind=FunctionProto] [canonicaltype=bool (Foo &)] [canonicaltypekind=FunctionProto] [resulttype=bool] [resulttypekind=Bool] [args= [Foo &] [LValueReference]] [isPOD=0] [isAnonRecDecl=0] 33*476a497fSLuca Di Sera // CHECK: CXXMethod=operator=:5:10 (copy-assignment operator) [type=bool (volatile Foo &)] [typekind=FunctionProto] [canonicaltype=bool (volatile Foo &)] [canonicaltypekind=FunctionProto] [resulttype=bool] [resulttypekind=Bool] [args= [volatile Foo &] [LValueReference]] [isPOD=0] [isAnonRecDecl=0] 34*476a497fSLuca Di Sera // CHECK: CXXMethod=operator=:6:10 (copy-assignment operator) [type=bool (const volatile Foo &)] [typekind=FunctionProto] [canonicaltype=bool (const volatile Foo &)] [canonicaltypekind=FunctionProto] [resulttype=bool] [resulttypekind=Bool] [args= [const volatile Foo &] [LValueReference]] [isPOD=0] [isAnonRecDecl=0] 35*476a497fSLuca Di Sera // CHECK: CXXMethod=operator=:7:10 (copy-assignment operator) [type=bool (Foo)] [typekind=FunctionProto] [canonicaltype=bool (Foo)] [canonicaltypekind=FunctionProto] [resulttype=bool] [resulttypekind=Bool] [args= [Foo] [Elaborated]] [isPOD=0] [isAnonRecDecl=0] 36*476a497fSLuca Di Sera // CHECK: FunctionTemplate=operator=:11:10 [type=bool (const T &)] [typekind=FunctionProto] [canonicaltype=bool (const type-parameter-0-0 &)] [canonicaltypekind=FunctionProto] [resulttype=bool] [resulttypekind=Bool] [isPOD=0] [isAnonRecDecl=0] 37*476a497fSLuca Di Sera // CHECK: CXXMethod=operator=:12:10 [type=bool (const bool &)] [typekind=FunctionProto] [resulttype=bool] [resulttypekind=Bool] [args= [const bool &] [LValueReference]] [isPOD=0] [isAnonRecDecl=0] 38*476a497fSLuca Di Sera // CHECK: CXXMethod=operator=:13:10 [type=bool (char &)] [typekind=FunctionProto] [resulttype=bool] [resulttypekind=Bool] [args= [char &] [LValueReference]] [isPOD=0] [isAnonRecDecl=0] 39*476a497fSLuca Di Sera // CHECK: CXXMethod=operator=:14:10 [type=bool (volatile unsigned int &)] [typekind=FunctionProto] [resulttype=bool] [resulttypekind=Bool] [args= [volatile unsigned int &] [LValueReference]] [isPOD=0] [isAnonRecDecl=0] 40*476a497fSLuca Di Sera // CHECK: CXXMethod=operator=:15:10 [type=bool (const volatile unsigned char &)] [typekind=FunctionProto] [resulttype=bool] [resulttypekind=Bool] [args= [const volatile unsigned char &] [LValueReference]] [isPOD=0] [isAnonRecDecl=0] 41*476a497fSLuca Di Sera // CHECK: CXXMethod=operator=:16:10 [type=bool (int)] [typekind=FunctionProto] [resulttype=bool] [resulttypekind=Bool] [args= [int] [Int]] [isPOD=0] [isAnonRecDecl=0] 42*476a497fSLuca Di Sera // CHECK: ClassTemplate=Bar:21:7 (Definition) [type=] [typekind=Invalid] [isPOD=0] [isAnonRecDecl=0] 43*476a497fSLuca Di Sera // CHECK: CXXMethod=operator=:22:10 (copy-assignment operator) [type=bool (const Bar<T> &)] [typekind=FunctionProto] [canonicaltype=bool (const Bar<T> &)] [canonicaltypekind=FunctionProto] [resulttype=bool] [resulttypekind=Bool] [args= [const Bar<T> &] [LValueReference]] [isPOD=0] [isAnonRecDecl=0] 44*476a497fSLuca Di Sera // CHECK: CXXMethod=operator=:23:10 (copy-assignment operator) [type=bool (Bar<T> &)] [typekind=FunctionProto] [canonicaltype=bool (Bar<T> &)] [canonicaltypekind=FunctionProto] [resulttype=bool] [resulttypekind=Bool] [args= [Bar<T> &] [LValueReference]] [isPOD=0] [isAnonRecDecl=0] 45*476a497fSLuca Di Sera // CHECK: CXXMethod=operator=:24:10 (copy-assignment operator) [type=bool (volatile Bar<T> &)] [typekind=FunctionProto] [canonicaltype=bool (volatile Bar<T> &)] [canonicaltypekind=FunctionProto] [resulttype=bool] [resulttypekind=Bool] [args= [volatile Bar<T> &] [LValueReference]] [isPOD=0] [isAnonRecDecl=0] 46*476a497fSLuca Di Sera // CHECK: CXXMethod=operator=:25:10 (copy-assignment operator) [type=bool (const volatile Bar<T> &)] [typekind=FunctionProto] [canonicaltype=bool (const volatile Bar<T> &)] [canonicaltypekind=FunctionProto] [resulttype=bool] [resulttypekind=Bool] [args= [const volatile Bar<T> &] [LValueReference]] [isPOD=0] [isAnonRecDecl=0] 47*476a497fSLuca Di Sera // CHECK: CXXMethod=operator=:26:10 (copy-assignment operator) [type=bool (Bar<T>)] [typekind=FunctionProto] [canonicaltype=bool (Bar<T>)] [canonicaltypekind=FunctionProto] [resulttype=bool] [resulttypekind=Bool] [args= [Bar<T>] [Elaborated]] [isPOD=0] [isAnonRecDecl=0] 48