Вы не можете назначать массивы, никогда.Живите с этим.
Чтобы ваша функция работала, вы могли бы сделать ссылку :
double (&ar)[3][3] = mat1;
В качестве альтернативы, вы могли бы обернуть вашу голуюмассив в чем-то вроде std::array<std::array<double, M>, N>
и возвращают , что по значению.Вот почему существуют обертки типа std::array
- они позволяют обрабатывать массивы как значения.Тот же трюк работал в C с самого первого дня (помещение массива в структуру), но на самом деле это хорошо и читабельно в C ++:
typedef typename std::array<std::array<T, M>, N> type;
operator type() const { return internal_array; }