VC8 Bug: operator delete in protected nested class
От: Were  
Дата: 02.09.08 15:50
Оценка: 58 (1)
Нашел еще одну багу в студии, которая не позволяет использовать умные указатели для вложенных классов с перегруженным оператором delete, объявленных в защищенной секции.
Простейший код, с помощью которого воспроизводится бага:

#include <stdlib.h>

template < typename T >
    struct C
{
    C()
    {
        delete( new T()); // error C2248: 'A::B' : cannot access private struct declared in class 'A'
    }
};

class A 
{
    struct B
    {
        ~B() {}
        void* operator new( size_t size )
        {
            return malloc( size );
        }

        void operator delete( void *ptr)
        {
            if ( ptr ) free( ptr );
        }

    };

    C< B > b_;
};
int main()
{
    A a;
    return 0;
}

Если убрать ~B() или вынести B в public или убрать operator delete, то все компилится.

PS comeau компилит.
Re: VC8 Bug: operator delete in protected nested class
От: Bell Россия  
Дата: 03.09.08 04:30
Оценка: 6 (1)
Здравствуйте, Were, Вы писали:

Вот еще в тему: здесь
Автор: Xentrax
Дата: 29.05.08
Любите книгу — источник знаний (с) М.Горький
Re[2]: VC8 Bug: operator delete in protected nested class
От: Were  
Дата: 03.09.08 07:03
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, Were, Вы писали:


B>Вот еще в тему: здесь
Автор: Xentrax
Дата: 29.05.08


Каюсь, поиск не заюзал )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.