diff options
author | Sebastian Redl <sebastian.redl@getdesigned.at> | 2009-02-07 00:15:38 +0000 |
---|---|---|
committer | Sebastian Redl <sebastian.redl@getdesigned.at> | 2009-02-07 00:15:38 +0000 |
commit | 112a9766164c8f5124a380b7069428f42e4db25b (patch) | |
tree | 590ecdb80f47c586baa908e96ada2aa558a97cd0 /clang/test/SemaCXX/member-pointer.cpp | |
parent | ad41b838167411ddf3d1aeb43ce3436d95834e39 (diff) | |
download | bcm5719-llvm-112a9766164c8f5124a380b7069428f42e4db25b.tar.gz bcm5719-llvm-112a9766164c8f5124a380b7069428f42e4db25b.zip |
Implement dereferencing of pointers-to-member.
llvm-svn: 63983
Diffstat (limited to 'clang/test/SemaCXX/member-pointer.cpp')
-rw-r--r-- | clang/test/SemaCXX/member-pointer.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/member-pointer.cpp b/clang/test/SemaCXX/member-pointer.cpp index 64cfc68c012..7d71b49fca9 100644 --- a/clang/test/SemaCXX/member-pointer.cpp +++ b/clang/test/SemaCXX/member-pointer.cpp @@ -79,3 +79,28 @@ void g() { void (HasMembers::*pmd)() = &HasMembers::d; } + +void h() { + HasMembers hm, *phm = &hm; + + int HasMembers::*pi = &HasMembers::i; + hm.*pi = 0; + int i = phm->*pi; + (void)&(hm.*pi); + (void)&(phm->*pi); + (void)&((&hm)->*pi); // expected-error {{address expression must be an lvalue or a function designator}} + + void (HasMembers::*pf)() = &HasMembers::f; + (hm.*pf)(); + (phm->*pf)(); +} + +struct OverloadsPtrMem +{ + int operator ->*(const char *); +}; + +void i() { + OverloadsPtrMem m; + int foo = m->*"Awesome!"; +} |