increment template function