| // RUN: %clang_cc1 -fsyntax-only -verify %s |
| // expected-no-diagnostics |
| struct AnyPtr { |
| template<typename T> |
| operator T*() const; |
| }; |
| |
| // If A is a cv-qualified type, the top level cv-qualifiers of A's type |
| // are ignored for type deduction. |
| void test_cvquals(AnyPtr ap) { |
| int* const ip = ap; |
| const float * const volatile fp = ap; |
| } |
| |
| // If A is a reference type, the type referred to by A is used for |
| // type deduction. |
| void test_ref_arg(AnyPtr ap) { |
| const int* const &ip = ap; |
| double * const &dp = ap; |
| } |
| |
| struct AnyRef { |
| template<typename T> |
| operator T&() const; |
| }; |
| |
| void test_ref_param(AnyRef ar) { |
| int &ir = ar; |
| const float &fr = ar; |
| int i = ar; |
| } |