1 // PR c++/57325
2 
3 class valarray { int _M_data; };
4 template < typename > struct SimpleJet { valarray partials; };
5 
6 template < class C > struct scoped_ptr_impl
7 {
scoped_ptr_implscoped_ptr_impl8     scoped_ptr_impl (C *):data_ () { }
9     struct Data
10     {
11         C ptr;
12     };
13     Data data_;
14 };
15 
16 template < class, class = int >struct scoped_ptr;
17 template < class C, class D > struct scoped_ptr <C[], D >
18 {
19     scoped_ptr ():impl_ (0) { }
20     scoped_ptr_impl < C > impl_;
21 };
22 
23 template < typename JetsT > void
24 TestJets (JetsT *)
25 {
26     typedef typename JetsT::JetType JetT;
27     scoped_ptr < JetT[] > a;
28 }
29 
30 template < typename T > struct SimpleJets
31 {
32     typedef SimpleJet < T > JetType;
33     scoped_ptr < SimpleJet < T >[] > vars_;
34 };
35 
36 void fn ()
37 {
38     SimpleJets < double >b;
39     TestJets (&b);
40 }
41