// RUN: %clang_cc1 -fsyntax-only -verify %s -Wno-unused
// RUN: %clang_cc1 -fsyntax-only -verify %s -Wno-unused -fms-compatibility -DMSVC
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s -Wno-unused
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s -Wno-unused -fms-compatibility -DMSVC
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s -Wno-unused
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s -Wno-unused -fms-compatibility -DMSVC
int i;
typename N::A::type *ip1 = &i;
// expected-warning@-2 {{'typename' occurs outside of a template}}
typename N::B::type *ip2 = &i; // expected-error{{no type named 'type' in 'N::B'}}
// expected-warning@-2 {{'typename' occurs outside of a template}}
typename N::C::type *ip3 = &i; // expected-error{{typename specifier refers to non-type member 'type'}}
// expected-warning@-2 {{'typename' occurs outside of a template}}
void
N::X<N::A>::type *ip4 = &i;
N::X<N::B>::type *ip5 = &i; // expected-note{{in instantiation of template class 'N::X<N::B>' requested here}}
N::X<N::C>::type *ip6 = &i; // expected-note{{in instantiation of template class 'N::X<N::C>' requested here}}
N::X<int>::type fail1; // expected-note{{in instantiation of template class 'N::X<int>' requested here}}
;
;
;
;
::Y<A>::type ip7 = &i;
::Y<B>::type ip8 = &i; // expected-note{{in instantiation of template class 'Y<B>' requested here}}
::Y<C>::type ip9 = &i; // expected-note{{in instantiation of template class 'Y<C>' requested here}}
;
D<long> struct_D; // expected-note {{in instantiation of template class 'D<long>' requested here}}
;
;
E<F> struct_E; // expected-note {{in instantiation of template class 'E<F>' requested here}}
;
;
G<H> struct_G;
// namespace missing_typename
// namespace missing_typename_and_base
// namespace func_type_vs_construct_tmp
// namespace pointer_vs_multiply