std::valarray<T>::operator [](std::size_t)
возвращает T&
, который будет работать нормально.
std::valarray<T>::operator [](std::size_t) const
возвращает T
, что будет r-значением и, следовательно, не может быть получено по его адресу.
Поскольку valarray_test::pointy
само по себе const
, valarray_test::v
рассматривается как const
и, следовательно, вызывается перегрузка const
operator[]
. Либо сделайте valarray_test::v
mutable
, либо сделайте valarray_test::pointy
non- const
.