Массивы в С++ это одна большая ложь. На самом деле это просто кучка данных, расположенная последовательно в памяти. Хоть какую-то информацию о типе массива можно получить только если массив статический и находится в той же области видимости что и sizeof. В ином случае это просто указатель без дополнительной информации. Поэтому большинство современных источников выступают против использования массивов.
Можете сделать как-то так, чтобы принимать
любые массивы:
#include <iostream>
#include <type_traits>
template <typename T>
typename std::enable_if<std::is_array<T>::value>::type
func(T& a)
{
std::cout << "func sizeof(a)=" << sizeof(a) << '\n';
}
int main()
{
char a[2][10]{ "test1","test2" };
std::cout << "sizeof(a)=" << sizeof(a[0]) << '\n';
func(a[0]);
}