В ответе на этот пост (частично), специализирующийся на параметре нестандартного шаблона зависимого типа", он сообщает:
Тип параметра шаблона, соответствующего специализированному аргумент non-type не должен зависеть от параметра специализация. [Пример:
template <class T, T t> struct C {}; template <class T> struct C<T, 1>; // error template< int X, int (*array_ptr)[X] > class A {}; int array[5]; template< int X > class A<X,&array> { }; // error
-end пример]
Мой вопрос: почему это ограничение здесь? Существует, по крайней мере, один случай, когда я нахожу, что это ограничение мешает писать чистый код. Например.
template <typename T, T*>
struct test;
template <typename T>
struct test<T, nullptr> // or struct test<T, (T*)nullptr>
{
};
template <typename R, typename...ARGs, R(*fn)(ARGs...)>
struct test<R(ARGs...), fn>
{
};
Хотя я не уверен, что есть другие случаи, когда утверждение константы, основанной на типе, является проблемой, не имеющей никакого смысла.
У кого-нибудь есть причина, почему это так?