
Recently, Hanan Sadar asked about a multi_array fill implementation [1]. The standard std::fill_n(x.data(),x.num_elements(),v) answer only works when x is a boost::multi_array or boost::multi_array_ref but does not handle the general MultiArray concept. I decided to implement an arbitrary dimensional MultiArray fill capable of handling such views correctly. It's been absolutely miserable for reasons I don't understand but which resemble comments from James Amundson's recent thread [2]. Attached is my attempt with two exasperating lines marked by "Cannot use reference, why?". For a non-multi_array, non-multi_array_ref instance (i.e. a view) using a signature like template< class Array, class V > void operator()(Array x, const V &v); allows the code to compile and operate correctly. However, it incurs pass-by-value overhead. Using a signature like template< class Array, class V > void operator()(Array &x, const V &v); using pass-by-reference dies at compilation time. All of my attempts to use MultiArray's associated typedefs die, including hours of mucking with MultiArray::reference. What am I missing here? Why can't I pass a general MultiArray view type by reference? - Rhys [1] http://groups.google.com/group/boost-list/browse_thread/thread/829ebea7fef28... [2] http://groups.google.com/group/boost-list/browse_thread/thread/4531a7c35a586...