mirror of
https://github.com/boostorg/core.git
synced 2025-05-10 07:13:54 +00:00
Workaround VC7 bug which strips const from nested classes
[SVN r16797]
This commit is contained in:
parent
c54b0184bb
commit
9db43ee00f
@ -14,13 +14,25 @@
|
|||||||
// For more information, see http://www.boost.org
|
// For more information, see http://www.boost.org
|
||||||
|
|
||||||
#ifndef BOOST_UTILITY_ADDRESSOF_HPP
|
#ifndef BOOST_UTILITY_ADDRESSOF_HPP
|
||||||
#define BOOST_UTILITY_ADDRESSOF_HPP
|
# define BOOST_UTILITY_ADDRESSOF_HPP
|
||||||
|
|
||||||
|
# include <boost/config.hpp>
|
||||||
|
# include <boost/detail/workaround.hpp>
|
||||||
|
# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
|
||||||
|
# include <boost/type_traits/add_pointer.hpp>
|
||||||
|
# endif
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
|
|
||||||
// Do not make addressof() inline. Breaks MSVC 7. (Peter Dimov)
|
// Do not make addressof() inline. Breaks MSVC 7. (Peter Dimov)
|
||||||
|
|
||||||
template <typename T> T* addressof(T& v)
|
// VC7 strips const from nested classes unless we add indirection here
|
||||||
|
# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
|
||||||
|
template <typename T> typename add_pointer<T>::type
|
||||||
|
# else
|
||||||
|
template <typename T> T*
|
||||||
|
# endif
|
||||||
|
addressof(T& v)
|
||||||
{
|
{
|
||||||
return reinterpret_cast<T*>(
|
return reinterpret_cast<T*>(
|
||||||
&const_cast<char&>(reinterpret_cast<const volatile char &>(v)));
|
&const_cast<char&>(reinterpret_cast<const volatile char &>(v)));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user