Какова цель boost :: detail :: addr_impl_ref? - PullRequest
0 голосов
/ 25 февраля 2010

Внутри 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?

1 Ответ

2 голосов
/ 25 февраля 2010

Запрещает другим операторам неявного преобразования T быть частью преобразования.

РЕДАКТИРОВАТЬ: Например:

struct foo
{
   operator foo*()
   {
      return 0;
   }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...