Как сделать 2 реализации конструктора по умолчанию в шаблонном классе Matrix

В шаблоне класса Matrix нужно реализовать 2 специализации (если это можно так назвать) конструкторов по умолчанию.

У меня есть класс Matrix

template <size_t N, size_t M, typename Field>
class Matrix { ... }

В нём мне нужно сделать 2 конструктора по умолчанию для случаев, когда M == N (матрица квадратная) тогда заполнить её как единичную, и когда M != N, тогда заполнить нулями. Не совсем понимаю, как "перегрузить этот конструктор, если работаем с шаблонными параметрами)

Я что-то слышал об enable_if, может он тут подойдет? :/

Matrix() {
 for (size_t i = 0; i < N; i++) {
     for (size_t j = 0; j < N; j++) {
         if (i == j) {
             vec[i][j] = Field(1);
         }
         else {
             vec[i][j] = Field(0);
         }
     }
 }
}

Ответы (2 шт):

Автор решения: Harry

Так не годится?

Matrix() {
    for (size_t i = 0; i < N; i++)
         for (size_t j = 0; j < M; j++)
             vec[i][j] = Field(M == N && i == j);
}
→ Ссылка
Автор решения: sibedir

Может быть просто поменять местами параметры и сделать один со значением по-умолчанию?

template <typename Field, size_t N, size_t M = N>
class Matrix { ... }

Добавлено: Ну а в самом конструкторе, для реализации 2 способов заполнения использовать if constexpr. Тут он прекрасно отработает.

→ Ссылка