Ничто не предвещало беды: ни убогая поддержка шаблонов (поубивал бы тех, кто отключает поддержу default parameters), ни время компиляции (15 минут - не предел, этот монстр еще и 1.5 гига ОЗУ кушает при этом), ни отсутствие документации (и правильно, закрытую платформу да без доки точно никто не осилит). Проблема нарисовалась при переносе старой самописной библиотечки шаблонных полезностей. Итак, имеем вот такую штуку (досталась в наследство со времен царя Гороха и кочевала по проектам чёрт знает сколько):
struct DeletePtr_t
{
public:
template
void operator()(const Ptr* const &toDel) const
{
delete toDel;
}
template
void operator()(Ptr* &toDel)
{
delete toDel;
toDel = NULL;
}
};
Такой "замысловатой" конструкции компилятор не осилил, как не осилил он и выдать хоть какую-нить информацию, в том числе где навернулся и почему. Разработчики компилятора решили просто: навернулись ну и
Код был проверен набором онлайн-компиляторов и скомпилился без проблем. Проблемы у существующего компилятора возникаю здесь:
void operator()(const Ptr* const &toDel) const
при этом следующие варианты работают без проблем
void operator()(Ptr* const &toDel) const
void operator()(const int* const &toDel) const
В общем, кто любит решать подобные головоломки (а может кто уже решил?) - милости прошу в комментарии. В любом случае, во имя великого дедлайна я должен разобраться с этим не позднее обеда и да прибудут со мной системные ресурсы :).
П.С. Как бы прикрутить подсветку и форматирование кода? Очень неудобно...
А нафига вообще нужен такой шаблонный класс?
ОтветитьУдалитьЛично я не могу себе представить вменяемого кода где он мог бы использоваться.
А зарезолвить ошибку скорее всего можно через тайпдефы
vector< CSomePtr* > vPointers;
ОтветитьУдалитьfor_each( m_vPointers.begin(), m_vPointers.end(), DeletePtr() ); Вменяемо? :)
Про резолв ошибки - можно поподробнее?