|
Boost : |
Subject: Re: [boost] Interprocess regexes
From: Phil Endecott (spam_from_boost_dev_at_[hidden])
Date: 2009-12-06 12:34:09
Jeffrey Bosboom wrote:
> Then I guess a better question would be, "Why don't standard library
> implementations properly use ::pointer?"
In 2005 I asked the GNU libstdc++ people about this, and Matt Austern replied:
"The sticking point, and the reason why nobody has done this yet for
libstdc++, is that nobody has spelled out precisely what requirements
my_allocator<T>::pointer must satisfy. Is my_allocator::pointer
allowed to have a nontrivial copy constructor? Does it have to be a
POD? Can you use const_cast to convert my_allocator::const_pointer to
my_allocator::pointer? Can you use static_cast to convert
my_allocator<void>::pointer to my_allocator<T>::pointer? If there's an
implicit conversion from D* to B*, does it necessarily follow that
there's an implicit conversion from my_allocator<D>::pointer to
my_allocator<B>::pointer?
Martin Sobor (of Dinkumware) said:
"With user-defined
pointers you can't make many of the assumptions and optimizations
that you can otherwise. For example, you can't assume that such
pointer types are convertible to true pointers (such as void*),
you might need to be prepared to deal with exceptions where they
normally cannot occur, you can't use memcpy to copy objects of
user-defined pointers, etc.
The thread starts here: http://gcc.gnu.org/ml/libstdc++/2005-05/msg00294.html
I'm pleased to read in Mike's post that this is resolved for C++0x. I
don't believe this is yet implemented in GNU libstdc++ (the bug is
still open).
Regards, Phil.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk