On Thu, 24 Nov 2005 07:10:41 -0200, Daniel Krügler
Bruno Martínez wrote:
I know. The problem is that I want incomplete types support *and* release member function.
Use std::auto_ptr and ensure that you obey Peter Dimov's recommendations. I know, that the standard says, in 5.3.5
"If the object being deleted has incomplete class type at the point of deletion and the complete class has a non-trivial destructor or a deallocation function, the behavior is undefined."
and in 17.4.3.6
"if an incomplete type (3.9) is used as a template argument when instantiating a template component."
There exists no special restriction on std::auto_ptr for incomplete classes
I don't understand. There is a restriction. It's 17.4.3.6!
and the main difference between std::auto_ptr and boost::scoped_ptr in this point is that the standard says, that "no diagnose is required", while boost will diagnose that due a safety belt in boost::checked_delete.
Yes, scoped_ptr is very well the behaved.
I don't seem to require a destructor in this case, for vc71 or gcc3.4:
#include
struct node { boost::scoped_ptr<node> next; };
int main() { node n; }
This snippet does not proof, that no d'tor is needed, because node::next is empty for the complete program run-time. Just assign a node to next, and you will see...
I did, but it still works:
#include