| // Header for PCH test cxx_exprs.cpp |
| |
| |
| // CXXStaticCastExpr |
| typedef __typeof__(static_cast<void *>(0)) static_cast_result; |
| |
| // CXXDynamicCastExpr |
| struct Base { Base(int); virtual void f(int x = 492); ~Base(); }; |
| struct Derived : Base { Derived(); void g(); }; |
| Base *base_ptr; |
| typedef __typeof__(dynamic_cast<Derived *>(base_ptr)) dynamic_cast_result; |
| |
| // CXXReinterpretCastExpr |
| typedef __typeof__(reinterpret_cast<void *>(0)) reinterpret_cast_result; |
| |
| // CXXConstCastExpr |
| const char *const_char_ptr_value; |
| typedef __typeof__(const_cast<char *>(const_char_ptr_value)) const_cast_result; |
| |
| // CXXFunctionalCastExpr |
| int int_value; |
| typedef __typeof__(double(int_value)) functional_cast_result; |
| |
| // CXXBoolLiteralExpr |
| typedef __typeof__(true) bool_literal_result; |
| const bool true_value = true; |
| const bool false_value = false; |
| |
| // CXXNullPtrLiteralExpr |
| typedef __typeof__(nullptr) cxx_null_ptr_result; |
| |
| void foo(Derived *P) { |
| // CXXMemberCallExpr |
| P->f(12); |
| } |
| |
| |
| // FIXME: This is a hack until <typeinfo> works completely. |
| namespace std { |
| class type_info {}; |
| } |
| |
| // CXXTypeidExpr - Both expr and type forms. |
| typedef __typeof__(typeid(int))* typeid_result1; |
| typedef __typeof__(typeid(2))* typeid_result2; |
| |
| Derived foo(); |
| |
| Derived::Derived() : Base(4) { |
| } |
| |
| void Derived::g() { |
| // CXXThisExpr |
| f(2); // Implicit |
| this->f(1); // Explicit |
| |
| // CXXThrowExpr |
| throw; |
| throw 42; |
| |
| // CXXDefaultArgExpr |
| f(); |
| |
| const Derived &X = foo(); |
| |
| // FIXME: How do I make a CXXBindReferenceExpr, CXXConstructExpr? |
| |
| int A = int(0.5); // CXXFunctionalCastExpr |
| A = int(); // CXXZeroInitValueExpr |
| |
| Base *b = new Base(4); // CXXNewExpr |
| delete b; // CXXDeleteExpr |
| } |
| |
| |
| // FIXME: The comment on CXXTemporaryObjectExpr is broken, this doesn't make |
| // one. |
| struct CtorStruct { CtorStruct(int, float); }; |
| |
| CtorStruct create_CtorStruct() { |
| return CtorStruct(1, 3.14f); // CXXTemporaryObjectExpr |
| }; |
| |
| // CharacterLiteral variants |
| const char char_value = 'a'; |
| const wchar_t wchar_t_value = L'ı'; |
| const char16_t char16_t_value = u'ç'; |
| const char32_t char32_t_value = U'∂'; |