We need some tricks in template programming to have a clean user facing API while internally using our classes with more capabilities.