Как третьекурсники хотят казаться умными

template<typename T>;
void printArray(const T * arr, int size)
{
    int cur = 0;
    while(cur != size)
        std::cout << *(arr + cur++) << " ";
}

Хотел показать. как можно обходить списывание)

Тоже покажу, раз уж такая заварушка.

template<typename T>;
void printArray(T * arr, int size) {
    while (size-- > 0)
        std::cout << *arr++ << " ";
}

ну ок

template<typename T>;
void printArray(T * arr, int size) {
    for (int i = 0; i < size; std::cout << *(arr + i++) << " ");
}

ну уже если на крайняк,

template<typename T>;
void printArray(T * arr, int size) {
    for_each(arr, arr + size, [](T a){cout << a << " ";});
}