auto_ptr - это тип интеллектуального указателя, который работает при условии, что указатель принадлежит только одной стороне, и если эта сторона-владелец выходит из области видимости, указатель удаляется.
Когда вы передаете auto_ptr функции, вы «даете» функции указатель, и у вас ее больше нет.когда вы разыменовываете его, вы получаете поведение нулевого указателя (которое, конечно, не определено).
Для того, чтобы ваш код компилировался, вы должны немного изменить определение B
, оно должно быть
auto_ptr<tClass> B = new tClass;
, так как auto_ptr не является типом (егошаблон типа), и вам вообще не нужен указатель на этот тип, так как класс перегружает это поведение.