Ранее, не подозревая о существовании std::addressof
, почему он существует, имеет смысл для меня: как способ принятия адреса при наличии перегруженного operator&
. Однако реализация несколько непрозрачна. Из gcc 4.7.1
:
template<typename _Tp>
inline _Tp*
__addressof(_Tp& __r) _GLIBCXX_NOEXCEPT
{
return reinterpret_cast<_Tp*>
(&const_cast<char&>(reinterpret_cast<const volatile char&>(__r)));
}
reinterpret_cast<_Tp*>
очевиден. Остальная часть - темная магия. Может кто-то сломать, как это работает?