1// RUN: %clang_cc1 -fsyntax-only %s
2
3struct AnyT {
4  template<typename T>
5  operator T();
6};
7
8void test_cvqual_ref(AnyT any) {
9  const int &cir = any;
10}
11
12struct AnyThreeLevelPtr {
13  template<typename T>
14  operator T***() const
15  {
16    T x = 0;
17    // FIXME: looks like we get this wrong, too!
18    // x = 0; // will fail if T is deduced to a const type
19           // (EDG and GCC get this wrong)
20    return 0;
21  }
22};
23
24struct X { };
25
26void test_deduce_with_qual(AnyThreeLevelPtr a3) {
27  int * const * const * const ip = a3;
28}
29
30struct AnyPtrMem {
31  template<typename Class, typename T>
32  operator T Class::*() const
33  {
34    T x = 0;
35    // FIXME: looks like we get this wrong, too!
36    // x = 0; // will fail if T is deduced to a const type.
37           // (EDG and GCC get this wrong)
38    return 0;
39  }
40};
41
42void test_deduce_ptrmem_with_qual(AnyPtrMem apm) {
43  const float X::* pm = apm;
44}
45