/* { dg-do run } */ template class M { public: M(const int* arr) { for (unsigned long r = 0; r < R; ++r) for (unsigned long c = 0; c < C; ++c) m[r*C+c] = arr[r*C+c]; } int operator()(unsigned r, unsigned c) const { return m[r*C+c]; } private: int m[R*C]; }; extern "C" void abort (void); int main() { int vals[2][2] = { { 1, 2 }, { 5, 6 } }; M<2,2> m( &(vals[0][0]) ); if (m(1,0) != 5) abort (); return 0; }