
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) { std::swap(t,x.t); } -- Sean Perry Compiler Development IBM Canada Lab (905)-413-6031 (tie 313-6031), fax (905)-413-4839 Joaquín Mª López Muñoz <joaquin@tid.es> To Sent by: boost@lists.boost.org boost-bounces@lis cc ts.boost.org Subject 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 boost@lists.boost .org 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 case 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 any occurances of swap in the outer scope, and the using declaration behaves "as 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 compile 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 changed 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: http://lists.boost.org/mailman/listinfo.cgi/boost