1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 // expected-no-diagnostics
3 struct AnyPtr {
4 template<typename T>
5 operator T*() const;
6 };
7
8 // If A is a cv-qualified type, the top level cv-qualifiers of A's type
9 // are ignored for type deduction.
test_cvquals(AnyPtr ap)10 void test_cvquals(AnyPtr ap) {
11 int* const ip = ap;
12 const float * const volatile fp = ap;
13 }
14
15 // If A is a reference type, the type referred to by A is used for
16 // type deduction.
test_ref_arg(AnyPtr ap)17 void test_ref_arg(AnyPtr ap) {
18 const int* const &ip = ap;
19 double * const &dp = ap;
20 }
21
22 struct AnyRef {
23 template<typename T>
24 operator T&() const;
25 };
26
test_ref_param(AnyRef ar)27 void test_ref_param(AnyRef ar) {
28 int &ir = ar;
29 const float &fr = ar;
30 int i = ar;
31 }
32