| // RUN: %clang_cc1 -fsyntax-only %s |
| |
| struct AnyT { |
| template<typename T> |
| operator T(); |
| }; |
| |
| void test_cvqual_ref(AnyT any) { |
| const int &cir = any; |
| } |
| |
| struct AnyThreeLevelPtr { |
| template<typename T> |
| operator T***() const |
| { |
| T x = 0; |
| // FIXME: looks like we get this wrong, too! |
| // x = 0; // will fail if T is deduced to a const type |
| // (EDG and GCC get this wrong) |
| return 0; |
| } |
| }; |
| |
| struct X { }; |
| |
| void test_deduce_with_qual(AnyThreeLevelPtr a3) { |
| int * const * const * const ip = a3; |
| } |
| |
| struct AnyPtrMem { |
| template<typename Class, typename T> |
| operator T Class::*() const |
| { |
| T x = 0; |
| // FIXME: looks like we get this wrong, too! |
| // x = 0; // will fail if T is deduced to a const type. |
| // (EDG and GCC get this wrong) |
| return 0; |
| } |
| }; |
| |
| void test_deduce_ptrmem_with_qual(AnyPtrMem apm) { |
| const float X::* pm = apm; |
| } |