Проблема не в том, что мы не знаем, что в файле, ведь точно так же программе, умножающей два действительных числа, можно подсунуть файл с текстом, и думаю, ни у кого не возникает вопросов, как компилятору удаётся проверить типы в этом случае.
Таким образом, в программе должна быть функция чтения, возвращающая матрицу определённого размера. И если читаются обе матрицы, и размер заранее неизвестен, то тип матрицы, возвращаемой при втором чтении, должен зависеть от типа первой матрицы.
Собственно, почему нет? Они уже наверху, вниз могут течь за счёт гравитации, достаточно трубопровода.
Проще и быстрее написать NULL, NULL, NULL…
Таким образом, в программе должна быть функция чтения, возвращающая матрицу определённого размера. И если читаются обе матрицы, и размер заранее неизвестен, то тип матрицы, возвращаемой при втором чтении, должен зависеть от типа первой матрицы.