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