Поскольку структура A
должна отвечать за создание и уничтожение ее членов, я предлагаю вам сделать следующее:
template <size_t S = 5>
struct A {
A() {
memset(str, 0, S);
}
char str[S];
};
и тогда вы можете иметь:
template<>
void B<A<>>::init()
{}
ОБНОВЛЕНИЕ
Как указал @NathanOliver, конструктор по умолчанию для struct A
даже не нужен. Следующее тоже будет работать:
template <size_t S = 5>
struct A {
char str[S]{};
};
и, поскольку ответственность за инициализацию массива char
передается в struct A
, не требуется специализация шаблона.