
The problem might be the body of fill_functor for the general case. "*i" will produce a temporary (a subarray), which you are then trying to pass immediately by reference to the smaller fill_functor case. C++ doesn't let you pass temporaries by reference, which is a real problem when you need proxy references like MultiArray does. The solution should be as follows:
for (typename Array::iterator i = x.begin(); i != x.end(); ++i) { typename Array::iterator::reference ri = *i; f(ri,v); }
Ron's suggestion did fix my problem. Thanks Ron. Just in case anyone's ever searching for a general MultiArray fill implementation, I've attached the now working code/test case. This might not be a bad example to add to the MultiArray tutorial, both because it touches on an easy mistake and because people ask about fill with some frequency. - Rhys