> what could it mean to have a block of memory holding one that has not been initialized?
I am not proposing this. I am proposing to copy-construct elements, just as std::vector does. Note that std::vector has the following constructor and resize functions:
vector::vector( size_type count, const T& value = T ); // I am skipping the allocator since it doesn't matter
void vector::resize( size_type count, const value_type& value );
Note how in both signatures there is an argument, value, that can take an user-constructed value and simply copy it. Since the user has constructed the value, it is well formed. This allows you to use std::vector with types that are not default-constructible. This ofc requires the type to be copy-constructible, but this can be a lesser restriction than not allowing user-defined constructors in the first place. Again, the standard library does this, so it's probably been motivated already.
I do not see a reason why multi_array could not do the same. In multi_array case, the signature would be in the form:
multi_array(extents, const T & value);
resize(extents, const T & value);
I hope this clarifies what my request is. I do not want to use pointers, in the same way that one would not recommend using pointers when storing non-default-constructible classes in std::vector.
Best,
Eugenio Bargiacchi