#include <iostream>
#include <ostream>
using namespace std;
template<typename T,unsigned size>
struct Array
{
typedef T type[size];
mutable type data;
Array()
{
cout << "Array::Array" << endl;
}
~Array()
{
cout << "Array::~Array" << endl;
}
};
template<typename T> inline
typename Array<T,1>::type &make_array(const T &p1,const Array<T,1> &aux=Array<T,1>())
{
aux.data[0]=p1;
return aux.data;
}
template<typename T> inline
typename Array<T,2>::type &make_array(const T &p1,const T &p2,const Array<T,2> &aux=Array<T,2>())
{
aux.data[0]=p1;
aux.data[1]=p2;
return aux.data;
}
template<typename T> inline
typename Array<T,3>::type &make_array(const T &p1,const T &p2,const T &p3,const Array<T,3> &aux=Array<T,3>())
{
aux.data[0]=p1;
aux.data[1]=p2;
aux.data[2]=p3;
return aux.data;
}
// ...
void test_array(int (&p)[3])
{
cout << p[0] << " " << p[1] << " " << p[2] << endl;
}
void test_ptr(int *p)
{
cout << p[0] << " " << p[1] << " " << p[2] << endl;
}
int main(int argc,char *argv[])
{
test_array(make_array(33,22,11));
test_ptr(make_array(33,22,11));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8b3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKdGVtcGxhdGU8dHlwZW5hbWUgVCx1bnNpZ25lZCBzaXplPgpzdHJ1Y3QgQXJyYXkKewogICAgdHlwZWRlZiBUIHR5cGVbc2l6ZV07CiAgICBtdXRhYmxlIHR5cGUgZGF0YTsKICAgIEFycmF5KCkKICAgIHsKICAgICAgICBjb3V0IDw8ICJBcnJheTo6QXJyYXkiIDw8IGVuZGw7CiAgICB9CiAgICB+QXJyYXkoKQogICAgewogICAgICAgIGNvdXQgPDwgIkFycmF5Ojp+QXJyYXkiIDw8IGVuZGw7CiAgICB9Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUKdHlwZW5hbWUgQXJyYXk8VCwxPjo6dHlwZSAmbWFrZV9hcnJheShjb25zdCBUICZwMSxjb25zdCBBcnJheTxULDE+ICZhdXg9QXJyYXk8VCwxPigpKQp7CiAgICBhdXguZGF0YVswXT1wMTsKICAgIHJldHVybiBhdXguZGF0YTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lCnR5cGVuYW1lIEFycmF5PFQsMj46OnR5cGUgJm1ha2VfYXJyYXkoY29uc3QgVCAmcDEsY29uc3QgVCAmcDIsY29uc3QgQXJyYXk8VCwyPiAmYXV4PUFycmF5PFQsMj4oKSkKewogICAgYXV4LmRhdGFbMF09cDE7CiAgICBhdXguZGF0YVsxXT1wMjsKICAgIHJldHVybiBhdXguZGF0YTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lCnR5cGVuYW1lIEFycmF5PFQsMz46OnR5cGUgJm1ha2VfYXJyYXkoY29uc3QgVCAmcDEsY29uc3QgVCAmcDIsY29uc3QgVCAmcDMsY29uc3QgQXJyYXk8VCwzPiAmYXV4PUFycmF5PFQsMz4oKSkKewogICAgYXV4LmRhdGFbMF09cDE7CiAgICBhdXguZGF0YVsxXT1wMjsKICAgIGF1eC5kYXRhWzJdPXAzOwogICAgcmV0dXJuIGF1eC5kYXRhOwp9CgovLyAuLi4KCnZvaWQgdGVzdF9hcnJheShpbnQgKCZwKVszXSkKewogICAgY291dCA8PCBwWzBdIDw8ICIgIiA8PCBwWzFdIDw8ICIgIiA8PCBwWzJdIDw8IGVuZGw7Cn0KCnZvaWQgdGVzdF9wdHIoaW50ICpwKQp7CiAgICBjb3V0IDw8IHBbMF0gPDwgIiAiIDw8IHBbMV0gPDwgIiAiIDw8IHBbMl0gPDwgZW5kbDsKfQoKaW50IG1haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKQp7CiAgICB0ZXN0X2FycmF5KG1ha2VfYXJyYXkoMzMsMjIsMTEpKTsKICAgIHRlc3RfcHRyKG1ha2VfYXJyYXkoMzMsMjIsMTEpKTsKICAgIHJldHVybiAwOwp9Cg==