ReturnType() default ctor is called explicitly, what is the purpose of it? To assign 0? If ReturnType was some user-defined type it could not work as expected. Consider using ReturnType result(0); which would also be more readable.