#include <iostream>
#include <boost/array.hpp>
#include <algorithm>
template <typename T, size_t N>
inline boost::array<T,N>& to_array(T(&ar)[N]) {
return *reinterpret_cast<boost::array<T,N>*>(&ar[0]);
}
template <typename T, size_t N>
inline const boost::array<T,N>& to_array(const T(&ar)[N]) {
return *reinterpret_cast<const boost::array<T,N>*>(&ar[0]);
}
using namespace std;
int main(int ac, char* av[]) {
const int hoge[] = {1,2,3,4,5};
int foo[5];
to_array(foo) = to_array(hoge);
for (size_t i = 0; i < to_array(foo).size(); ++i) {
cout << "foo[" << i << "]=" << foo[i] << endl;
}
copy(to_array(hoge).rbegin(), to_array(hoge).rend(), to_array(foo).begin());
for (boost::array<int,5>::iterator i = to_array(foo).begin(); i != to_array(foo).end(); ++i) {
cout << *i << endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Ym9vc3QvYXJyYXkuaHBwPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgppbmxpbmUgYm9vc3Q6OmFycmF5PFQsTj4mIHRvX2FycmF5KFQoJmFyKVtOXSkgewogICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxib29zdDo6YXJyYXk8VCxOPio+KCZhclswXSk7Cn0KdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgppbmxpbmUgY29uc3QgYm9vc3Q6OmFycmF5PFQsTj4mIHRvX2FycmF5KGNvbnN0IFQoJmFyKVtOXSkgewogICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBib29zdDo6YXJyYXk8VCxOPio+KCZhclswXSk7Cn0KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbihpbnQgYWMsIGNoYXIqIGF2W10pIHsKCWNvbnN0IGludCBob2dlW10gPSB7MSwyLDMsNCw1fTsKCWludCBmb29bNV07Cgl0b19hcnJheShmb28pID0gdG9fYXJyYXkoaG9nZSk7Cglmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvX2FycmF5KGZvbykuc2l6ZSgpOyArK2kpIHsKCQljb3V0IDw8ICJmb29bIiA8PCBpIDw8ICJdPSIgPDwgZm9vW2ldIDw8IGVuZGw7Cgl9CgkKCWNvcHkodG9fYXJyYXkoaG9nZSkucmJlZ2luKCksIHRvX2FycmF5KGhvZ2UpLnJlbmQoKSwgdG9fYXJyYXkoZm9vKS5iZWdpbigpKTsKCglmb3IgKGJvb3N0OjphcnJheTxpbnQsNT46Oml0ZXJhdG9yIGkgPSB0b19hcnJheShmb28pLmJlZ2luKCk7IGkgIT0gdG9fYXJyYXkoZm9vKS5lbmQoKTsgKytpKSB7CgkJY291dCA8PCAqaSA8PCBlbmRsOwoJfQoKfQo=