1*daa5f777SErich Keane // RUN: %clang_cc1 -fsyntax-only -verify %s 2*daa5f777SErich Keane // expected-no-diagnostics 3*daa5f777SErich Keane namespace llvm { 4*daa5f777SErich Keane template<typename T > struct StringSet; 5*daa5f777SErich Keane template<int I > struct Int; 6*daa5f777SErich Keane template <typename Inner, template <typename> class Outer> 7*daa5f777SErich Keane struct TemplTempl; 8*daa5f777SErich Keane } 9*daa5f777SErich Keane 10*daa5f777SErich Keane namespace lld { 11*daa5f777SErich Keane using llvm::StringSet; 12*daa5f777SErich Keane using llvm::Int; 13*daa5f777SErich Keane using llvm::TemplTempl; 14*daa5f777SErich Keane }; 15*daa5f777SErich Keane 16*daa5f777SErich Keane namespace llvm { 17*daa5f777SErich Keane template<typename T > struct StringSet; 18*daa5f777SErich Keane } 19*daa5f777SErich Keane 20*daa5f777SErich Keane template<typename T> struct Temp{}; 21*daa5f777SErich Keane 22*daa5f777SErich Keane namespace llvm { 23*daa5f777SErich Keane template<typename T = int> struct StringSet{}; 24*daa5f777SErich Keane template<int I = 5> struct Int{}; 25*daa5f777SErich Keane template <typename Inner, template <typename> class Outer = Temp> 26*daa5f777SErich Keane struct TemplTempl{}; 27*daa5f777SErich Keane }; 28*daa5f777SErich Keane 29*daa5f777SErich Keane namespace lld { 30*daa5f777SErich Keane StringSet<> s; 31*daa5f777SErich Keane Int<> i; 32*daa5f777SErich Keane TemplTempl<int> tt; 33*daa5f777SErich Keane } 34