diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2009-10-07 20:43:36 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-10-07 20:43:36 +0000 |
commit | 0351a1e2e17c1edf27f90c23fbf65d8fcad995c4 (patch) | |
tree | c8ac743f00e74c097b13baf564c0692d73c25f3b /test/SemaCXX/builtin-ptrtomember-overload-1.cpp | |
parent | 0a4074768a6ecd81513f0db02bfb0e96ab3e56a0 (diff) | |
download | clang-0351a1e2e17c1edf27f90c23fbf65d8fcad995c4.tar.gz |
Fixes problem in finding visible convertion functions of a class
where matching conversion types in base classes were still visible.
Plus refactoring and cleanup.
Added a test case.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83485 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/SemaCXX/builtin-ptrtomember-overload-1.cpp')
-rw-r--r-- | test/SemaCXX/builtin-ptrtomember-overload-1.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/test/SemaCXX/builtin-ptrtomember-overload-1.cpp b/test/SemaCXX/builtin-ptrtomember-overload-1.cpp new file mode 100644 index 0000000000..304e8d1398 --- /dev/null +++ b/test/SemaCXX/builtin-ptrtomember-overload-1.cpp @@ -0,0 +1,44 @@ +// RUN: clang-cc -fsyntax-only -verify %s -std=c++0x + +struct A {}; +struct E {}; + +struct R { + operator A*(); + operator E*(); +}; + + +struct S { + operator A*(); + operator E*(); +}; + +struct B : R { + operator A*(); +}; + +struct C : B { + +}; + +void foo(C c, int A::* pmf) { + int i = c->*pmf; +} + +struct B1 : R, S { + operator A*(); +}; + +struct C1 : B1 { + +}; + +void foo1(C1 c1, int A::* pmf) { + int i = c1->*pmf; +} + +void foo1(C1 c1, int E::* pmf) { + // FIXME. Error reporting needs much improvement here. + int i = c1->*pmf; // expected-error {{left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is 'struct C1'}} +} |