Boost logo

Boost :

From: Niels Dekker - mail address until 2008-12-31 (nd_mail_address_valid_until_2008-12-31_at_[hidden])
Date: 2008-07-28 11:53:35


David Abrahams wrote:
> I could have sworn that's not what I saw when I responded to your
> message, but it appears to be the case now. Also it really
> surprises me because I know msvc-7.1 does do ADL.

For the record, I just double-checked. msvc-7.1 doesn't /always/ have
ADL failures when template arguments are involved. But still the
following C++ program is rejected by msvc-7.1 (because of a link error),
as it fails to do ADL in that particular case:

  ////////////////////////////////////////////////
  namespace standard_space
  {
    template <class T> void swap(T&, T&);
    template <class T, class U> struct pair;
    template <class T, class U> void swap(pair<T, U>&, pair<T, U>&);
  }

  namespace foo_space
  {
    struct foo {};
    void swap(foo&, foo&) {};
  }

  template <class T> void temp_fun()
  {
    T obj1, obj2;
    using standard_space::swap;
    swap(obj1, obj2); // msvc-7.1 fails to do ADL!
  }

  int main()
  {
    temp_fun<foo_space::foo>();
    return 0;
  }
  ////////////////////////////////////////////////

http://www.dinkumware.com/exam/ says (when selecting "VC v7.1/C++"):
  error LNK2019: unresolved external symbol "void __cdecl
standard_space::swap<struct foo_space::foo> [...] referenced in function
"void __cdecl temp_fun<struct foo_space::foo>(void)"

This error appears to indicate that msvc-7.1 prefers to call
standard_space::swap, instead of foo_space::swap, in that particular
case. Which is very much like what's happening inside
boost/utility/swap.hpp, when doing #include <algorithm> and "using
std::swap".

Fortunately, msvc-7.1 end-users can work around the issue by adding
their own boost::swap overload, as we've discussed last Saturday. The
first results of the "specialized_in_boost_and_other" test I added
yesterday indicate that msvc-7.1 will select this overload, even when
it's declared /after/ doing #include <boost/utility/swap.hpp>
http://www.boost.org/development/tests/trunk/developer/utility-swap_.html

Kind regards, Niels


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk