// RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
;
;
// Error recovery: out-of-line constructors whose names have template arguments.
X1<T>::X1<T> // expected-error{{out-of-line constructor for 'X1' cannot have template arguments}}
// expected-error{{out-of-line constructor for 'X1' cannot have template arguments}}
// Error recovery: out-of-line constructor names intended to be types
X0::X0 // expected-error{{qualified reference to 'X0' is a constructor name rather than a type in this context}}
X1<T>::X1<T> // expected-error{{missing 'typename'}}
X1<T>::X1<T> // expected-error{{missing 'typename'}}
typename X1<T>::template X1<T> // expected-warning {{qualified reference to 'X1' is a constructor name rather than a template name in this context}}
typename X1<T>::template // expected-warning {{qualified reference to 'X1' is a constructor name rather than a template name in this context}}
void
void
void
; // expected-note {{instantiation of}}
void
; // expected-note {{instantiation of}}
// We have a special case for lookup within using-declarations that are
// member-declarations: foo::bar::baz::baz always names baz's constructor
// in such a context, even if looking up 'baz' within foo::bar::baz would
// not find the injected-class-name. Likewise foo::bar::baz<T>::baz also
// names the constructor.