1762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s
2ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregornamespace N1 {
3ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor
4ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor  template<typename T> struct X0 { }; // expected-note{{here}}
5ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor
6ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor  namespace Inner {
7ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor    template<typename T> struct X1 { };
8ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor  }
9ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor
10ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor  template struct X0<int>;
11ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor  template struct Inner::X1<int>;
12ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor}
13ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor
14ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregortemplate<typename T> struct X2 { }; // expected-note{{here}}
15ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor
16ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregortemplate struct ::N1::Inner::X1<float>;
17ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor
18ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregornamespace N2 {
19ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor  using namespace N1;
20ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor
213e2e91e934ecf083a7c0835b58d9627ca2faddc9Richard Smith  template struct X0<double>; // expected-error{{must occur in namespace 'N1'}}
22ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor
23ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor  template struct X2<float>; // expected-error{{at global scope}}
24ff66803b43f2ea9206637dceb793e9505f3b9c48Douglas Gregor}
25