Народ, тут бага для меня непонятная нарисовалась свежаю сборка icpp (только что заливал код)
класс CBLPtr<T>в нем есть конструкторы
CBLPtr(const CBLPtr<T>& lp) : p(NULL), m_bIsGroupContext(FALSE)
{
_Assign(lp.p);
}
template<class U>
CBLPtr(const CBLPtr<U>& lp) : p(NULL), m_bIsGroupContext(FALSE)
{
// artbear приведение (U*) неверно, но иначе в 3.0 не проходят тесты с неопределенным числом параметров :(
// TODO что-то странное :(
_Assign((U*)lp); !! //artbear - коммент не мой - чтобы можно было выполнять приведение от CBLPtr<CBLContext> к CBLPtr<CComponentClass>
//_Assign(lp.p); // artbear - разрешено использовать только простые преобразования - от CBLPtr<Наследник_CBLContext> к CBLPtr<CBLContext>
}
CBLPtr(T* lp) : p(NULL), m_bIsGroupContext(FALSE) // показал на всякий случай
{
_Assign(lp);
}
// + оператор приведения
operator T*() const
{
return (T*)p; // кстати, тут нужно поправить :)
}
Насколько я понимаю, приведение (U*) во втором конструкторе неверно, так делать низя.
Но если убрать этот второй конструктор вообще или строку приведения закомментить, открыв следующую строку, или убрать первый конструктор, будет вылет 1С на методах с неопределенным числом параметров
Например, в тестовой конфе достаточно запустить тесты БинариДата, и 1С упадет на тесте ТестыБинариДата_СнятьБлокировку
.
Прошу помощи клуба.Т.к. мои силы иссякли
ЗЫ а в таком виде все работает. Хотя в отладчике на второй конструктор я не могу попасть, т.е. точка останова в нем не работает
Т.е. какая-то языковая хитрость наверняка, которую я не вижу.