uses here documents for all templates to make templates easier to read. also includes ctor and dtor