The std::cbegin function in can't call the std::begin function in unless it knows about it, so we need to declare the valarray overloads in . I considered adding a header with the declarations, but I don't think that's worth it, so I'm just declaring them directly in range_access.h Tested powerpc64le-linux, committed to trunk. I'll probably commit to the gcc-5 branch soon too.