Стандарт был окончательно доработан в 1998 году, исправления - в 2003 году, тогда как boost::addressof
датируется началом 2002 года.
Кроме того, не ясно, что addressof
является ответом. Перегрузки operator&()
указывают на то, что необработанных указателей следует избегать. Член Allocator::address
обеспечивает лучший интерфейс для перехода от Allocator::reference
к Allocator::pointer
, поэтому в общей теории вы должны иметь возможность вводить переопределение operator&
для класса с хорошим поведением с пользовательским распределителем.
Учитывая, что ссылки делают почти все, что делают указатели, а интерфейс Allocator абстрагирует все остальное, необязательно указывать необработанные указатели.
Удобство для разработчиков библиотеки не должно быть проблемой. Плохо определенная семантика Allocator::pointer
является проблемой, и то, что я читал до сих пор в C ++ 0x, не проясняет это.
C ++ 0x удаляет любое упоминание operator&
из CopyConstructible, и, кроме того, вообще не требует ничего-Constructible для аргументов контейнера - пользователь может придерживаться emplace
. Даже для vector
требуется только Destructible, хотя я полагаю, что для использования insert
или erase
потребуется больше.
(Обратите внимание, что в самом строгом чтении перегрузки не запрещены в C ++ 03. Вам просто не разрешено изменять значение или тип встроенной функции.)