Итак, несколько дней назад я узнал о std:: addressof. В http://en.cppreference.com/w/cpp/memory/addressof приведена возможная реализация:
template< class T >
T* addressof(T& arg)
{
return reinterpret_cast<T*>(
&const_cast<char&>(
reinterpret_cast<const volatile char&>(arg)));
}
Насколько я вижу, это можно просто реализовать, например:
template<typename T>
T* addressof( T& var )
{
return &var;
}
Почему ребята из cppreference решили реализовать его с помощью 3-х бросков? Есть ли какие-то детали, которые мне не хватает, что улучшает их реализацию. В чем смысл использования изменчивости, когда вы делаете это?