Нашел еще одну багу в студии, которая не позволяет использовать умные указатели для вложенных классов с перегруженным оператором 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 компилит.
Здравствуйте, Were, Вы писали:
Вот еще в тему:
здесьАвтор: Xentrax
Дата: 29.05.08
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, Were, Вы писали:
B>Вот еще в тему: здесьАвтор: Xentrax
Дата: 29.05.08
Каюсь, поиск не заюзал )