Для привязки параметра шаблона ссылки требуется имя объекта с внешней связью.Отдельные элементы массива не имеют имени и связи в C ++.Вот почему параметр шаблона ссылки не может быть привязан к элементу массива.См. 6.5 Программа и связь [basic.link] для получения полной информации.
Вы можете сделать ее скомпилированной, если отбросить ссылку (если возможно):
template<typename T, T V>
struct Test {};
Или получить доступ к элементу по индексу внутри шаблона:
template<class T, T const& A, size_t Idx>
struct Test2 {
static constexpr decltype(A[Idx]) element = A[Idx];
static_assert(std::is_reference<decltype(element)>::value, "");
};
using test = Test2<decltype(a), a, 1>;