template<typename T>

_TCHAR* itot(T n)

{

    static _TCHAR str[] = _T("000,000,000,000,000,000,000,000");

    _TCHAR* ptr = str + (sizeof str / sizeof str[0] - 2);

    _TCHAR sign = ',';

    unsigned int underflow = 0;

    unsigned int back = 0;

    if (n < 0)

    {

        if (n == -n)

        {

  n++;

            underflow = 1;

        }

        n = -n;

        sign = '-';

    }

    do

    {

        ptr[ 0]     = n          % 10 + '0';

        ptr[-1]     = n /     10 % 10 + '0';

        ptr[-2]     = n /    100 % 10 + '0';

        back        = n;

        n /=  1000;

        ptr -= 4;

    } while(n);

    str[sizeof str / sizeof str[0] - 2] += underflow;

    ptr += (back < 100) + (back < 10) + 1;

    *ptr = sign;

    return ptr + (sign == ',');

}