a demo for C++ template, c++ primer 16.1.5