// RUN: %clang_cc1 -fsyntax-only -verify %s template class SmallVectorImpl { public: explicit SmallVectorImpl(unsigned N) { } ~SmallVectorImpl() { } }; template class SmallVector : public SmallVectorImpl { typedef typename SmallVectorImpl::U U; // expected-error {{no type named 'U' in 'SmallVectorImpl'}} enum { MinUs = (static_cast(sizeof(T))*N + // expected-error {{invalid application of 'sizeof' to an incomplete type 'CallSite'}} static_cast(sizeof(U)) - 1) / static_cast(sizeof(U)), NumInlineEltsElts = MinUs }; U InlineElts[NumInlineEltsElts]; public: SmallVector() : SmallVectorImpl(NumInlineEltsElts) { } }; class CallSite; // expected-note {{forward declaration of 'CallSite'}} class InlineFunctionInfo { public: explicit InlineFunctionInfo() {} SmallVector DevirtualizedCalls; // expected-note {{in instantiation of template class 'SmallVector' requested}} };