В повышении:: деталь:: addressof_impl:: f () серия reinterpret_cast
s сделан для получения исполнительного адреса объекта в случае, если class T
перегрузился operator&()
:
template struct addressof_impl
{
static inline T* f( T& v, long )
{
return reinterpret_cast(
&const_cast(reinterpret_cast(v)));
}
}
К чему цель броска const volatile char&
вместо того, чтобы просто бросить к char&
?
Приведение к char &
завершится ошибкой, если T
имеет const
или ] volatile
квалификаторы - reinterpret_cast
не может их удалить (но может добавить), а const_cast
не может вносить произвольные изменения типа.
Объект может быть const
или volatile
, или и тем, и другим (каким бы оксюморонным он ни был), в этом случае, вероятно, reinterpret_cast
it к типу, у которого отсутствуют эти атрибуты. (Двигаться в обратном направлении, конечно, никогда не проблема).