#include <iostream>
#define PRINT_TRACE(STR) \
std::cout << __FILE__ << ":" << __LINE__ << ":" << STR << "\n";
template<size_t SZ>
void LoopThrough(const int(&Item)[SZ])
{
PRINT_TRACE("Specialized version");
for (size_t index = 0; index < SZ; ++index)
{
std::cout << Item[index] << "\n";
}
}
/*
template<typename Type, size_t SZ>
void LoopThrough(const Type(&Item)[SZ])
{
PRINT_TRACE("Generic version");
for (size_t index = 0; index < SZ; ++index)
{
std::cout << Item[index] << "\n";
}
}
class Sample
{
public:
template<size_t SZ>
void LoopThrough(const int(&Item)[SZ])
{
PRINT_TRACE("Specialized version");
for (size_t index = 0; index < SZ; ++index)
{
std::cout << Item[index] << "\n";
}
}
template<typename Type, size_t SZ>
void LoopThrough(const Type(&Item)[SZ])
{
PRINT_TRACE("Generic version");
for (size_t index = 0; index < SZ; ++index)
{
std::cout << Item[index] << "\n";
}
}
};
*/
int main()
{
{
int arr[] = { 1, 2 };
LoopThrough(arr);
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKCiNkZWZpbmUgUFJJTlRfVFJBQ0UoU1RSKSBcCnN0ZDo6Y291dCA8PCBfX0ZJTEVfXyA8PCAiOiIgPDwgX19MSU5FX18gPDwgIjoiIDw8IFNUUiA8PCAiXG4iOwoKdGVtcGxhdGU8c2l6ZV90IFNaPgp2b2lkIExvb3BUaHJvdWdoKGNvbnN0IGludCgmSXRlbSlbU1pdKQp7CiAgICBQUklOVF9UUkFDRSgiU3BlY2lhbGl6ZWQgdmVyc2lvbiIpOwogICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IFNaOyArK2luZGV4KQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCBJdGVtW2luZGV4XSA8PCAiXG4iOwogICAgfQp9Ci8qCgoKdGVtcGxhdGU8dHlwZW5hbWUgVHlwZSwgc2l6ZV90IFNaPgp2b2lkIExvb3BUaHJvdWdoKGNvbnN0IFR5cGUoJkl0ZW0pW1NaXSkKewogICAgUFJJTlRfVFJBQ0UoIkdlbmVyaWMgdmVyc2lvbiIpOwogICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IFNaOyArK2luZGV4KQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCBJdGVtW2luZGV4XSA8PCAiXG4iOwogICAgfQp9CgoKCmNsYXNzIFNhbXBsZQp7CiAgICBwdWJsaWM6CgogICAgdGVtcGxhdGU8c2l6ZV90IFNaPgogICAgdm9pZCBMb29wVGhyb3VnaChjb25zdCBpbnQoJkl0ZW0pW1NaXSkKICAgIHsKICAgICAgICBQUklOVF9UUkFDRSgiU3BlY2lhbGl6ZWQgdmVyc2lvbiIpOwogICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBTWjsgKytpbmRleCkKICAgICAgICB7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBJdGVtW2luZGV4XSA8PCAiXG4iOwogICAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlLCBzaXplX3QgU1o+CiAgICB2b2lkIExvb3BUaHJvdWdoKGNvbnN0IFR5cGUoJkl0ZW0pW1NaXSkKICAgIHsKICAgICAgICBQUklOVF9UUkFDRSgiR2VuZXJpYyB2ZXJzaW9uIik7CiAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IFNaOyArK2luZGV4KQogICAgICAgIHsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8IEl0ZW1baW5kZXhdIDw8ICJcbiI7CiAgICAgICAgfQogICAgfQoKCn07CgoqLwppbnQgbWFpbigpCnsKICAgICAgewogICAgICAgaW50IGFycltdID0geyAxLCAyIH07CiAgICAgICBMb29wVGhyb3VnaChhcnIpOwoKICAgIH0KfQo=