Стандарт был окончательно доработан в 1998 г. с исправлениями в 2003 г., тогда как boost::addressof
датируется началом 2002 года.
Более того, неясно, является ли ответ addressof
. Перегрузки operator&()
указывают на то, что необработанных указателей следует избегать. Член Allocator::address
обеспечивает наилучший интерфейс для перехода от Allocator::reference
к Allocator::pointer
, поэтому в общей теории вы должны быть в состоянии эффективно ввести переопределение operator&
в хорошо себя зарекомендовавший класс с помощью специального распределителя.
Учитывая, что ссылки делают почти все то же, что и указатели, а интерфейс Allocator абстрагирует все остальное, необработанные указатели не нужны.
Удобство для разработчиков библиотек не должно быть проблемой. Плохо определенная семантика Allocator::pointer
является проблемой, и то, что я до сих пор читал в C++0x, не проясняет этого.
C++0x удаляет любое упоминание operator&
из CopyConstructible и, кроме того, вообще не требует ничего-конструируемого для аргументов контейнера — пользователь может придерживаться emplace
. Даже для vector
требуется только Destructible, хотя я полагаю, что на самом деле для использования insert
или erase
потребуется больше.
(Обратите внимание, что в самом строгом чтении перегрузки не запрещены в C++03. Вам просто не разрешено изменять значение или тип встроенной функции.)
person
Potatoswatter
schedule
27.04.2010
HRESULT GetStuff( IInterface** )
выполнялись для CComPtr‹IInterface›, и для этого требуется либо метод для получения адреса инкапсулированного указателя, либо перегруженныйoperator&()
. - person sharptooth   schedule 27.04.2010&t
имеет типT*
и обозначает адресT
. Технически это не запрещает перегрузку оператора, но запрещает изменять его поведение. - person Mike Seymour   schedule 27.04.2010