1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics 3550d9b28fd586db541eb6dd36f3c10d114e483d8Douglas Gregor 4550d9b28fd586db541eb6dd36f3c10d114e483d8Douglas Gregor// PR5311 5550d9b28fd586db541eb6dd36f3c10d114e483d8Douglas Gregortemplate<typename T> 6550d9b28fd586db541eb6dd36f3c10d114e483d8Douglas Gregorclass StringSwitch { 7550d9b28fd586db541eb6dd36f3c10d114e483d8Douglas Gregorpublic: 8550d9b28fd586db541eb6dd36f3c10d114e483d8Douglas Gregor template<unsigned N> 9550d9b28fd586db541eb6dd36f3c10d114e483d8Douglas Gregor void Case(const char (&S)[N], const int & Value) { 10550d9b28fd586db541eb6dd36f3c10d114e483d8Douglas Gregor } 11550d9b28fd586db541eb6dd36f3c10d114e483d8Douglas Gregor}; 12550d9b28fd586db541eb6dd36f3c10d114e483d8Douglas Gregor 13c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregorvoid test_stringswitch(int argc, char *argv[]) { 14550d9b28fd586db541eb6dd36f3c10d114e483d8Douglas Gregor (void)StringSwitch<int>(); 15550d9b28fd586db541eb6dd36f3c10d114e483d8Douglas Gregor} 16c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor 17c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregornamespace PR6986 { 18c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor template<class Class,typename Type,Type Class::*> 19c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor struct non_const_member_base 20c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor { 21c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor }; 22c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor 23c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor template<class Class,typename Type,Type Class::*PtrToMember> 24c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor struct member: non_const_member_base<Class,Type,PtrToMember> 25c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor { 26c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor }; 27c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor 28c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor struct test_class 29c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor { 30c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor int int_member; 31c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor }; 32c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor typedef member< test_class,const int,&test_class::int_member > ckey_m; 33c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor void test() 34c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor { 35c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor ckey_m m; 36c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor } 37c0c8300329718b45df259c49310d3c2b377a6e0fDouglas Gregor} 388f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor 398f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregornamespace rdar8980215 { 408f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor enum E { E1, E2, E3 }; 418f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor 428f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor template<typename T, E e = E2> 438f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor struct X0 { 448f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor X0() {} 458f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor template<typename U> X0(const X0<U, e> &); 468f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor }; 478f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor 488f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor template<typename T> 498f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor struct X1 : X0<T> { 508f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor X1() {} 518f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor template<typename U> X1(const X1<U> &x) : X0<T>(x) { } 528f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor }; 538f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor 548f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor X1<int> x1i; 558f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor X1<float> x1f(x1i); 568f5667d06a785719691c1139b961411d7f0aedf5Douglas Gregor} 57