diff --git a/include/boost/ref.hpp b/include/boost/ref.hpp index e45dd17..9a6fbc5 100644 --- a/include/boost/ref.hpp +++ b/include/boost/ref.hpp @@ -12,7 +12,7 @@ // ref.hpp - ref/cref, useful helper functions // // Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi) -// Copyright (C) 2001 Peter Dimov +// Copyright (C) 2001, 2002 Peter Dimov // Copyright (C) 2002 David Abrahams // // Permission to copy, use, modify, sell and distribute this software @@ -31,8 +31,16 @@ template class reference_wrapper public: typedef T type; +#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) + + explicit reference_wrapper(T& t): t_(&t) {} + +#else + explicit reference_wrapper(T& t): t_(addressof(t)) {} +#endif + operator T& () const { return *t_; } T& get() const { return *t_; } diff --git a/include/boost/utility/addressof.hpp b/include/boost/utility/addressof.hpp index 22da536..a434b8e 100644 --- a/include/boost/utility/addressof.hpp +++ b/include/boost/utility/addressof.hpp @@ -1,5 +1,6 @@ // Copyright (C) 2002 Brad King (brad.king@kitware.com) // Doug Gregor (gregod@cs.rpi.edu) +// Peter Dimov // // Permission to copy, use, sell and distribute this software is granted // provided this copyright notice appears in all copies. @@ -17,11 +18,12 @@ namespace boost { -template -inline T* addressof(T& v) +// Do not make addressof() inline. Breaks MSVC 7. (Peter Dimov) + +template T* addressof(T& v) { return reinterpret_cast( - &const_cast(reinterpret_cast(v))); + &const_cast(reinterpret_cast(v))); } }