Alisdair Meredith <[EMAIL PROTECTED]> writes:

> There is a problem with the Borland BCB6 compiler specializing std::swap
> for user defined types when using the STLport standard library.  This
> may apply to other compilers using the library as well, but only have
> experience with Borland.
>
> An example is the clearest demonstration:
>
> //  -----  Begin example
> #include <boost/shared_ptr.hpp>
>
> class Swappable
> {
> public:
>     Swappable() {}
>
>     void Swap( Swappable & ) {  }
> };
>
> namespace   std
> {
> template<>
> void swap( Swappable &lhs, Swappable &rhs )
> {
>     lhs.Swap( rhs );
> }
>
> }
>
> int main(int argc, char* argv[])
> {
>     Swappable   a, b;
>     std::swap( a, b );
>
>     boost::shared_ptr<Swappable> pA( new Swappable() );
>     boost::shared_ptr<Swappable> pB( new Swappable() );
> # if BOOST_WORKAROUND( __BORLANDC__, >= 0x0560 )
>     _STL::swap( pA, pB );
> # else
>     std::swap( pA, pB );
> # endif
>     return 0;
> }
> //  -----  End example
>
> If the workaround is disabled, the compiler cannot find the
> specialization in namespace std as the swap algorithm is implemented in
> namespace _STL and introduced by a namespace alias.
>
> What does this mean for Boost?
> i/  There are no test cases for this in the test suite, or BCB would be
> failing more tests!
> ii/ Anywhere we use std::swap, we need a borland hack as above (although
> better tuned to STLport version as well)

Err, I don't get it.  It seems to me that you only need the hack if
you're going to *specialize* swap.  *Using* std::swap should work just
fine.


-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to