Внутри boost есть boost :: detail :: addr_impl_ref struct, которая в основном имеет конструктор, принимающий ссылку T&
, и перегруженный operator T&()
, который возвращает эту ссылку Он используется в реализации boost :: addressof () :
template<class T> T* addressof( T& v )
{
return boost::detail::addressof_impl<T>::f( boost::detail::addr_impl_ref<T>( v ), 0 );
}
boost::detail::addressof_impl<T>::f()
принимает T&
в качестве первого параметра. boost::addressof<T>()
также имеет T& v
в качестве параметра.
Почему boost::detail::addr_impl_ref()
временный объект используется здесь для хранения и возврата T&
вместо простой передачи T& v
?