1// Header for PCH test cxx_exprs.cpp 2 3 4// CXXStaticCastExpr 5typedef __typeof__(static_cast<void *>(0)) static_cast_result; 6 7// CXXDynamicCastExpr 8struct Base { Base(int); virtual void f(int x = 492); ~Base(); }; 9struct Derived : Base { Derived(); void g(); }; 10Base *base_ptr; 11typedef __typeof__(dynamic_cast<Derived *>(base_ptr)) dynamic_cast_result; 12 13// CXXReinterpretCastExpr 14typedef __typeof__(reinterpret_cast<void *>(0)) reinterpret_cast_result; 15 16// CXXConstCastExpr 17const char *const_char_ptr_value; 18typedef __typeof__(const_cast<char *>(const_char_ptr_value)) const_cast_result; 19 20// CXXFunctionalCastExpr 21int int_value; 22typedef __typeof__(double(int_value)) functional_cast_result; 23 24// CXXBoolLiteralExpr 25typedef __typeof__(true) bool_literal_result; 26const bool true_value = true; 27const bool false_value = false; 28 29// CXXNullPtrLiteralExpr 30typedef __typeof__(nullptr) cxx_null_ptr_result; 31 32void foo(Derived *P) { 33 // CXXMemberCallExpr 34 P->f(12); 35} 36 37 38// FIXME: This is a hack until <typeinfo> works completely. 39namespace std { 40 class type_info {}; 41} 42 43// CXXTypeidExpr - Both expr and type forms. 44typedef __typeof__(typeid(int))* typeid_result1; 45typedef __typeof__(typeid(2))* typeid_result2; 46 47Derived foo(); 48 49Derived::Derived() : Base(4) { 50} 51 52void 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. 78struct CtorStruct { CtorStruct(int, float); }; 79 80CtorStruct create_CtorStruct() { 81 return CtorStruct(1, 3.14f); // CXXTemporaryObjectExpr 82}; 83 84// CharacterLiteral variants 85const char char_value = 'a'; 86const wchar_t wchar_t_value = L'ı'; 87const char16_t char16_t_value = u'ç'; 88const char32_t char32_t_value = U'∂'; 89