llvm/clang/test/CXX/dcl.decl/dcl.meaning/dcl.meaning.general/p3.cpp

// RUN: %clang_cc1 -fsyntax-only -verify %s

namespace N0 {
  template<typename T>
  void f0();

  template<typename T>
  int x0 = 0;

  template<typename T>
  class C0;
}
using namespace N0;

template<>
void f0<int>(); // expected-error {{no function template matches}}

template<>
int x0<int>;

template<>
class C0<int>;

namespace N1 {
  namespace N2 {
    template<typename T>
    void f2();

    template<typename T>
    int x2 = 0;

    template<typename T>
    class C2;
  }
  using namespace N2;
}

template<>
void N1::f2<int>(); // expected-error {{no function template matches}}

template<>
int N1::x2<int>;

template<>
class N1::C2<int>;

namespace N3 {
  namespace N4 {
    template<typename T>
    void f4();

    template<typename T>
    int x4 = 0;

    template<typename T>
    class C4;
  }
  using N4::f4;
  using N4::x4;
  using N4::C4;
}

template<>
void N3::f4<int>(); // expected-error {{no function template matches}}

template<>
int N3::x4<int>;

template<>
class N3::C4<int>;

inline namespace N5 {
  template<typename T>
  void f5();

  template<typename T>
  int x5 = 0;

  template<typename T>
  class C5;
}

template<>
void f5<int>();

template<>
int x5<int>;

template<>
class C5<int>;

namespace N6 {
  inline namespace N7 {
    template<typename T>
    void f7();

    template<typename T>
    int x7 = 0;

    template<typename T>
    class C7;
  }
}

template<>
void N6::f7<int>();

template<>
int N6::x7<int>;

template<>
class N6::C7<int>;