Passing Arrays by Value

It has already been said many times that (a) std::vector is preferred to c-style arrays, and (b) Arrays, vectors, and other data structures should preferably be passed by reference.
While this is sound advice in the general case, there may come a time when you want to pass a c-style array by value.
This is not simple since arrays decay to pointers on function calls. So, if you have:

int a[] = { 1, 2, 3, 4, 5};
f(a);

The actual argument to f() is a pointer to the first element of the array. In order to overcome it, wrap the array in a structure. This technique works both in C and C++, so I'll demonstrate it without using C++ specific features: