1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 // expected-no-diagnostics
4 // C++03 [namespace.udecl]p3:
5 // For the purpose of overload resolution, the functions which are
6 // introduced by a using-declaration into a derived class will be
7 // treated as though they were members of the derived class. In
8 // particular, the implicit this parameter shall be treated as if it
9 // were a pointer to the derived class rather than to the base
10 // class. This has no effect on the type of the function, and in all
11 // other respects the function remains a member of the base class.
19 Opaque0
test1(const int*);
21 Opaque0
test3(int*) const;
24 struct Derived
: Base
{
26 Opaque1
test0(const int*);
32 Opaque1
test2(int*) const;
39 Opaque0 a
= Derived().test0((int*) 0);
40 Opaque1 b
= Derived().test0((const int*) 0);
44 Opaque1 a
= Derived().test1((int*) 0);
45 Opaque0 b
= Derived().test1((const int*) 0);
49 Opaque0 a
= ((Derived
*) 0)->test2((int*) 0);
50 Opaque1 b
= ((const Derived
*) 0)->test2((int*) 0);
54 Opaque1 a
= ((Derived
*) 0)->test3((int*) 0);
55 Opaque0 b
= ((const Derived
*) 0)->test3((int*) 0);
59 // Typedef redeclaration.
60 namespace rdar8018262
{
74 // conversion operators
76 // call-surrogate conversion operators
77 // everything, but in dependent contexts