// http://stackoverflow.com/a/28240199/146041
#include<iostream>
using namespace std;
template<typename T, size_t N>
auto convert( T (&t) [N] ) -> T* {
//cout << __PRETTY_FUNCTION__ << endl;
return t; // just let pointer decay work for us here
}
template<typename T>
auto convert( T &t) -> T* {
//cout << __PRETTY_FUNCTION__ << endl;
return &t;
}
template<typename T, size_t N>
auto convert_end( T (&t) [N] ) -> T* {
//cout << __PRETTY_FUNCTION__ << endl;
return ((T*)t)+N; // just let pointer decay work for us here
}
template<typename T>
auto convert_end( T &t) -> T* {
//cout << __PRETTY_FUNCTION__ << endl;
return (&t)+1;
}
template<typename T>
void iterate_test(T&& t) {
int * b = convert(t);
int * e = convert_end(t);
cout << "(number of elements): " << (e-b) << endl;
while(b<e) {
cout << *b << endl;
++b;
}
}
int main() {
int i = 10;
int a1i[1] = {100};
int a3i[3] = {1,2,3};
iterate_test(i);
iterate_test(a1i);
iterate_test(a3i);
}
Ly8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjgyNDAxOTkvMTQ2MDQxCiNpbmNsdWRlPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4KYXV0byBjb252ZXJ0KCAgVCAoJnQpIFtOXSApIC0+IFQqIHsKCS8vY291dCA8PCBfX1BSRVRUWV9GVU5DVElPTl9fIDw8IGVuZGw7CglyZXR1cm4gdDsgLy8ganVzdCBsZXQgcG9pbnRlciBkZWNheSB3b3JrIGZvciB1cyBoZXJlCn0KdGVtcGxhdGU8dHlwZW5hbWUgVD4KYXV0byBjb252ZXJ0KCBUICZ0KSAtPiBUKiB7CgkvL2NvdXQgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCBlbmRsOwoJcmV0dXJuICZ0Owp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4KYXV0byBjb252ZXJ0X2VuZCggIFQgKCZ0KSBbTl0gKSAtPiBUKiB7CgkvL2NvdXQgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCBlbmRsOwoJcmV0dXJuICgoVCopdCkrTjsgLy8ganVzdCBsZXQgcG9pbnRlciBkZWNheSB3b3JrIGZvciB1cyBoZXJlCn0KdGVtcGxhdGU8dHlwZW5hbWUgVD4KYXV0byBjb252ZXJ0X2VuZCggVCAmdCkgLT4gVCogewoJLy9jb3V0IDw8IF9fUFJFVFRZX0ZVTkNUSU9OX18gPDwgZW5kbDsKCXJldHVybiAoJnQpKzE7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnZvaWQgaXRlcmF0ZV90ZXN0KFQmJiB0KSB7CglpbnQgKiBiID0gY29udmVydCh0KTsKCWludCAqIGUgPSBjb252ZXJ0X2VuZCh0KTsKCWNvdXQgPDwgIihudW1iZXIgb2YgZWxlbWVudHMpOiAiIDw8IChlLWIpIDw8IGVuZGw7Cgl3aGlsZShiPGUpIHsKCQljb3V0IDw8ICpiIDw8IGVuZGw7CgkJKytiOwoJfQp9CgppbnQgbWFpbigpIHsKCWludCBpID0gMTA7CglpbnQgYTFpWzFdID0gezEwMH07CglpbnQgYTNpWzNdID0gezEsMiwzfTsKCglpdGVyYXRlX3Rlc3QoaSk7CglpdGVyYXRlX3Rlc3QoYTFpKTsKCWl0ZXJhdGVfdGVzdChhM2kpOwp9Cg==