Separating out constructor templates for operations and types