Boost logo

Boost :

From: Sean Perry (perry_at_[hidden])
Date: 2007-11-16 10:31:50

This compiles fine with the version 9 compiler. I think the code is legal
(haven't spent great deal of time confirming) because the too swap()'s are
should be available for overload resolution with std::swap winning.

A very simple simple fix is to change the call to swap to be qualified.
For example:

 void swap(foo& x)

Sean Perry
Compiler Development
IBM Canada Lab
(905)-413-6031 (tie 313-6031), fax (905)-413-4839
             Joaquín Mª López                                              
             <joaquin_at_[hidden]>                                           To 
             Sent by:                  boost_at_[hidden]               
             boost-bounces_at_lis                                          cc 
                                       Re: [boost] [config][vacpp8.0]      
             11/16/07 07:10 AM         BOOST_FUNCTION_SCOPE_USING_DECLARAT 
                                       ION_BREAKS_ADL should be defined?   
             Please respond to                                             
John Maddock ha escrito:
> Hmmm, the interesting thing is, I'm having a hard time convincing myself
> that this code is legal, I'm cc'ing our friendly IBM compiler expert in
> he can shed light on this.
> Consider the code again:
> #include <algorithm>
> template<typename T>
> struct foo
> {
>  T t;
>  foo():t(0){}
>  void swap(foo& x)
>  {
>    using std::swap;
>    swap(t,x.t);
>  }
> };
> template<typename T>
> void swap(foo<T>& x,foo<T>& y)
> {
>   x.swap(y);
> }
> int main()
> {
>   foo<int> x,y;
>   x.swap(y);
> }
> In foo::swap the local declaration of the member function "swap" hides
> occurances of swap in the outer scope, and the using declaration behaves
> if" std::swap were imported into the *enclosing namespace*, which would
> still be hidden... and yet I can't believe that this simple idiom isn't
> actually legal ! :-)  And indeed all the other compilers I tested do
> this OK.
Ouch, didn't think about name hiding... this is why I love C++ :-/
Now I don't know either whether the code is legal or not. Anyway, if I
foo::swap to foo::swop the code would be undoubtedly legal then, right?
Noel, would you please try the attached variation?
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
(See attached file: fsudba2.cpp)
Unsubscribe & other changes:

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