Почему я получаю 2 разных значения "размера"?
vee(T* a)
называется конструктором преобразования .Когда вы пишете что-то вроде v1=x;
, массив x
распадается на указатель, тогда он преобразуется в vee
с помощью предоставленного конструктора преобразования.
v1=x;
, как если бы вы написали v1=vee<int>(x);
Как видите, временный экземпляр создается с неопределенным размером и указателем, что плохо.Затем вы назначаете этот экземпляр на v1
, что хуже.
Если вы не хотите, чтобы это автоконверсия в будущем, объявите ваш конструктор явным
explicit vee(T* a)