// { dg-do compile  }
// GROUPS passed operators
#include <iostream>

//
// ffrees space allocated for N-D array
//

template <class T>
void ffree(long rows, T** array)
{
for( long i = 0; i < rows; i++ )
  delete [] array[i];                   // delete row
delete [] array;                        // delete outer array
}

template <class T>
T* allocate1d(long size, T*& array)
{
return array = new T[size];
}

template <class T>
T** allocate2d(long d1, long d2, T**& array)
{
if( allocate1d(d1, array) != 0 ) // { dg-warning "template argument uses local type 'foo'" }
  {
  for( long i = 0; i < d1; i++ )
    {
    if( allocate1d(d2, array[i]) == 0 ) // { dg-warning "template argument uses local type 'foo'" }
      {
      ffree(i,array);
      return array;
      }
    }
  }
return array;
}

int main()
{
long d1 = 3, d2 = 4;
class foo
{
public:
foo() {std::cout << "foo created" << std::endl; }

~foo() {std::cout << "foo deleted" << std::endl; }
};

foo **f2;
allocate2d(d1, d2, f2); // { dg-warning "template argument uses local type 'foo'" }
                        // { dg-error "note" "" { target *-*-* } 52 }
ffree(d1, f2); // { dg-warning "template argument uses local type 'foo'" }

}
