смотреть: с некоторой строчки в сообщении об ошибке сигнатура F теряет параметры. Да, сам концепт реализован некорректно и должен проверять, что результат вызова функции вернет тип T, но суть в этом:
In substitution of 'template<class T, class F, int m, int n> requires Filler<F, T, int, int> void fill(T (&)[m][n], F&&) [with T = int; F = int (*)(int, int); int m = 2; int n = 10]
// ^ есть int (*)(int, int)
required for the satisfaction of 'Filler<F, T, int, int>' [with F = int (*)(); T = int]
// ^ уже только int (*)()
Так там же справа clang с такой же ошибкой
В clang в сообщении об ошибке везде корректная сигнатура F = int (*)(int, int), у gcc нет
Обсуждают сегодня