Мне нужно написать функцию constexpr addressof, но я считаю это невозможным. Кто-нибудь знает, возможно ли это?
Эталонная реализация в cppreference.com:
template< class T >
T* addressof(T& arg)
{
return reinterpret_cast<T*>(
&const_cast<char&>(
reinterpret_cast<const volatile char&>(arg)
)
);
}
использует reinterpret_cast (аналогично реализации GCC), поэтому он не будет делать. Я вижу, что последний проект С++ Standard, N3485 также не требует, чтобы addressof() был constexpr, хотя множество функций формировали заголовок < утилита > недавно были обновлены до constexpr.
Возможно, хотя и не очень убедительный или полезный прецедент для него:
constexpr MyType m;
constexpr MyType const* p = &m; // this works today
constexpr MyType const* p = addressof(m); // this is my question
Представьте, что MyType перегрузил оператор &.