1 // Header for PCH test cxx_exprs.cpp 2 3 4 // CXXStaticCastExpr 5 typedef __typeof__(static_cast<void *>(0)) static_cast_result; 6 7 // CXXDynamicCastExpr 8 struct Base { Base(int); virtual void f(int x = 492); ~Base(); }; 9 struct Derived : Base { Derived(); void g(); }; 10 Base *base_ptr; 11 typedef __typeof__(dynamic_cast<Derived *>(base_ptr)) dynamic_cast_result; 12 13 // CXXReinterpretCastExpr 14 typedef __typeof__(reinterpret_cast<void *>(0)) reinterpret_cast_result; 15 16 // CXXConstCastExpr 17 const char *const_char_ptr_value; 18 typedef __typeof__(const_cast<char *>(const_char_ptr_value)) const_cast_result; 19 20 // CXXFunctionalCastExpr 21 int int_value; 22 typedef __typeof__(double(int_value)) functional_cast_result; 23 24 // CXXBoolLiteralExpr 25 typedef __typeof__(true) bool_literal_result; 26 const bool true_value = true; 27 const bool false_value = false; 28 29 // CXXNullPtrLiteralExpr 30 typedef __typeof__(nullptr) cxx_null_ptr_result; 31 32 void foo(Derived *P) { 33 // CXXMemberCallExpr 34 P->f(12); 35 } 36 37 38 // FIXME: This is a hack until <typeinfo> works completely. 39 namespace std { 40 class type_info {}; 41 } 42 43 // CXXTypeidExpr - Both expr and type forms. 44 typedef __typeof__(typeid(int))* typeid_result1; 45 typedef __typeof__(typeid(2))* typeid_result2; 46 47 Derived foo(); 48 49 Derived::Derived() : Base(4) { 50 } 51 52 void Derived::g() { 53 // CXXThisExpr 54 f(2); // Implicit 55 this->f(1); // Explicit 56 57 // CXXThrowExpr 58 throw; 59 throw 42; 60 61 // CXXDefaultArgExpr 62 f(); 63 64 const Derived &X = foo(); 65 66 // FIXME: How do I make a CXXBindReferenceExpr, CXXConstructExpr? 67 68 int A = int(0.5); // CXXFunctionalCastExpr 69 A = int(); // CXXZeroInitValueExpr 70 71 Base *b = new Base(4); // CXXNewExpr 72 delete b; // CXXDeleteExpr 73 } 74 75 76 // FIXME: The comment on CXXTemporaryObjectExpr is broken, this doesn't make 77 // one. 78 struct CtorStruct { CtorStruct(int, float); }; 79 80 CtorStruct create_CtorStruct() { 81 return CtorStruct(1, 3.14f); // CXXTemporaryObjectExpr 82 }; 83 84 // CharacterLiteral variants 85 const char char_value = 'a'; 86 const wchar_t wchar_t_value = L''; 87 const char16_t char16_t_value = u''; 88 const char32_t char32_t_value = U''; 89