В C ++ 17 вы можете иметь:
template <auto&> struct A;
template <typename T, std::vector<T> & v>
struct A<v>
{
// ...
};
int main()
{
static std::vector<int> v;
[[maybe_unused]] A<v> a;
}
Демо
В предыдущем стандарте вам требуется
template <typename T, T& v> struct A;
template <typename T, std::vector<T>& v>
struct A<std::vector<T>, v>{};
или подобное.
MACRO может помочь избежать многословного decltype(v), v
использования:
#define AUTO(v) decltype(v), v
int main()
{
static std::vector<int> v;
A<AUTO(v)> a;
static_cast<void>(a); // Avoid warning about unused variable
}