// PR c++/57325 class valarray { int _M_data; }; template < typename > struct SimpleJet { valarray partials; }; template < class C > struct scoped_ptr_impl { scoped_ptr_impl (C *):data_ () { } struct Data { C ptr; }; Data data_; }; template < class, class = int >struct scoped_ptr; template < class C, class D > struct scoped_ptr { scoped_ptr ():impl_ (0) { } scoped_ptr_impl < C > impl_; }; template < typename JetsT > void TestJets (JetsT *) { typedef typename JetsT::JetType JetT; scoped_ptr < JetT[] > a; } template < typename T > struct SimpleJets { typedef SimpleJet < T > JetType; scoped_ptr < SimpleJet < T >[] > vars_; }; void fn () { SimpleJets < double >b; TestJets (&b); }