Re: compile error about auto_ptr
* George:
1.
From your reply, I assume you think std::allocator::construct is a example
of what you mean in-place consturction. Right? :-)
std::allocator::construct is an example.
The general mechanism for in-place construction is the placement new
operator declared by header <new>.
std::allocator::construct is defined in terms of that operator, and does
nothing more than enforcing the "wrong" type on the storage, a dirty hack.
2.
Could you show me some pseudo code about what do you mea templated
constructor please?
Real code is much simpler.
struct S
{
template< typename T >
S( T const& ) {} // This is not a copy constructor, by ?12.8/2.
};
I have got the C++ Spec at hand. I think you mean, here is the explanation
from the Spec, do you mean this?
--------------------
Because a template constructor or a constructor whose first parameter is an
rvalue reference is never a copy constructor, the presence of such a
constructor does not suppress the implicit declaration of a copy
constructor. Such constructors participate in overload resolution with other
constructors,
including copy constructors, and, if selected, will be used to copy an object.
--------------------
There's no such thing as "the C++ Spec".
There is an ISO standard (currently C++ 2003), and numerous drafts of a
new version of the standard.
The above quote, involving rvalue references (which do not exist in
standard C++), seems to be from one of the drafts, and it seems to be
from a non-normative note, not the normative main text.
"Non-normative" means that it's just an attempt at clarifying the
meaning of the normative text, and does not add anything at all to the
standard (or if it does, is not something a C++ implementation needs to
enforce or follow), and may even be technically wrong and/or misleading.
For example, all examples (examples are non-normative) in the standard
that only include <iostream> and use std::cout, are technically
incorrect, but, happily, as I understand it will be correct in C++0x.
For another more serious example, two of the four (non-normative)
sequence point examples in ?5/4 are incorrect, per C++ 2003.
That said, what I meant was what I wrote, ?12.8/2 of the standard, but
the non-normative note clarifies one of the consequences.
Cheers, & hth.,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?