From 18f8ff62a3adb44da0f52133e259439a882d5618 Mon Sep 17 00:00:00 2001 From: Sebastian Redl Date: Wed, 4 Feb 2009 21:23:32 +0000 Subject: Implement taking address of member functions, including overloaded ones. llvm-svn: 63779 --- clang/test/SemaCXX/member-pointer.cpp | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'clang/test/SemaCXX/member-pointer.cpp') diff --git a/clang/test/SemaCXX/member-pointer.cpp b/clang/test/SemaCXX/member-pointer.cpp index 450fdba367f..64cfc68c012 100644 --- a/clang/test/SemaCXX/member-pointer.cpp +++ b/clang/test/SemaCXX/member-pointer.cpp @@ -41,10 +41,19 @@ void f() { pdi1 = pdid; // expected-error {{incompatible type assigning 'int struct D::*', expected 'int struct A::*'}} } -struct HasMembers +struct TheBase +{ + void d(); +}; + +struct HasMembers : TheBase { int i; void f(); + + void g(); + void g(int); + static void g(double); }; namespace Fake @@ -54,9 +63,19 @@ namespace Fake } void g() { + HasMembers hm; + int HasMembers::*pmi = &HasMembers::i; int *pni = &Fake::i; + int *pmii = &hm.i; - // FIXME: Test the member function, too. + void (HasMembers::*pmf)() = &HasMembers::f; void (*pnf)() = &Fake::f; + &hm.f; // expected-error {{address expression must be an lvalue or a function designator}} + + void (HasMembers::*pmgv)() = &HasMembers::g; + void (HasMembers::*pmgi)(int) = &HasMembers::g; + void (*pmgd)(double) = &HasMembers::g; + + void (HasMembers::*pmd)() = &HasMembers::d; } -- cgit v1.2.3