Boost logo

Boost :

From: Pavel Chikulaev (pavel.chikulaev_at_[hidden])
Date: 2005-04-13 09:13:58

"Philippe Mori" <philippe_mori_at_[hidden]> wrote:
> My opinion is that we should only have one swap function per object
> type named swap. And we should always make it such that it won't
> throws.

What if class only has Swap function? What to do then?
Or swap can throw? (boost::array for example)

> I think that the best thing would be that std::swap would only compile
> for a given type T if the resulting function cannot throws (because
> copy constructor and assigment would not throws) and thus having a
> type trait would not be as much usefull.

It's not possible since std::swap implementated for not specialized type
as follows:
T t(a);
a = b;
b = t;
So, we can be sure in anything.
Will it throw or not?
Is it optimal?
We just can't answer these questions.

> OTOH, if we add type trait to indicate if swap is possible or if it will
> throw,
> then the defaut implementation should be able to deduce it from the traits
> of the copy constructor and assignment operator. In particular swap of
> POD types does not throws.

Yeah, some assumptions can be made, but not only for POD types and some
other trivial cases.
So we need to explicitly register type.

> Also the compiler should be able to detect throw () specification and
> provide the type trait itself.

Too many people don't use throw specifications, but their swap still not throws.

Thanks for comments, Philippe.

Pavel Chikulaev 

Boost list run by bdawes at, gregod at, cpdaniel at, john at