Я предполагаю, что вы пытаетесь сделать что-то вроде:
(Пожалуйста, в следующий раз укажите весь код, который вы пробовали)
void print() {}
template <typename T, typename... Types>
void print(T var1, Types... var2)
{
cout << "SIZE:"<<sizeof(var1)<< endl ;
print(var2...) ;
}
И когда вы попытаетесь запустить это:
char empname[15+1];
print(empname);
Вы получаете SIZE:8
размером char *
. Массив распадается на указатель, когда он передается параметру функции. Это происходит из-за затухания массива в указатель .
Так что, если вы укажете параметр шаблона вручную как ссылку на массив, он будет работать нормально.
char empname[15+1];
print<char (&)[16]>(empname);
Однако это, вероятно, не то, что вы хотите. Чтобы предотвратить распады, вы можете просто изменить тип аргумента на ссылку. Подробное описание здесь .
template <typename T, typename... Types>
void print(T& var1, Types&... var2)
{
cout << "SIZE:"<<sizeof(var1)<< endl ;
print(var2...) ;
}