#include <cstddef>

#include <iostream>
#include <string>

template < typename T >
void myprint( T const *, std::size_t  );

int main() {
    using namespace std;
    
    cout << "int array:" << endl;
    int ia[] = { 1, 2, 3 };
    myprint( ia, 3 );
    
    cout << "double array:" << endl;
    double da[] = { 1.1, 2.2, 3.3, 4.4 };
    myprint( da, 4 );
}

// implementation
template < typename T >
void myprint( T const *elems, std::size_t size ) {
    for( std::size_t i = 0; i < size; ++i )
        std::cout << elems[ i ] << std::endl;
}


template void myprint<int>( int const *, std::size_t );
template void myprint<double>( double const *, std::size_t );
