template can not be declare virtual