• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 -fsyntax-only %s
2 
3 struct AnyT {
4   template<typename T>
5   operator T();
6 };
7 
test_cvqual_ref(AnyT any)8 void test_cvqual_ref(AnyT any) {
9   const int &cir = any;
10 }
11 
12 struct AnyThreeLevelPtr {
13   template<typename T>
operator T***AnyThreeLevelPtr14   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 
24 struct X { };
25 
test_deduce_with_qual(AnyThreeLevelPtr a3)26 void test_deduce_with_qual(AnyThreeLevelPtr a3) {
27   int * const * const * const ip = a3;
28 }
29 
30 struct AnyPtrMem {
31   template<typename Class, typename T>
operator T Class::*AnyPtrMem32   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 
test_deduce_ptrmem_with_qual(AnyPtrMem apm)42 void test_deduce_ptrmem_with_qual(AnyPtrMem apm) {
43   const float X::* pm = apm;
44 }
45