template function definition and declaration must occur simultaneously, as with template classes