#include <iostream>
#include <algorithm>

typedef char byte;
typedef unsigned char ubyte;

template<class T>
class CGenerate
{
    T counter;
public:
    CGenerate() : counter(0)
    { }
    T operator()()
    {
        return ++counter;
    }
};

template<class T>
void Display(T elem)
{
    int i = elem;
    std::cout << i << std::endl;
}

int main()
{
    byte arrTest[10];
    ubyte uarrTest[10];
    std::generate(arrTest, arrTest + 10, CGenerate<byte>());
    std::generate(uarrTest, uarrTest + 10, CGenerate<ubyte>());
    std::cout << "arrTest (byte):" << std::endl;
    std::for_each(arrTest, arrTest + 10, Display<byte>);
    std::cout << std::endl << "uarrTest (ubyte):" << std::endl;
    std::for_each(uarrTest, uarrTest + 10, Display<ubyte>);
    return 0;
}
