The implicit constructors will do the work for you and you can return NOT_A_NUMBER.  If you wanted to make it explicit, you could do what you have, but leave out the return_type promotion and replace it all with T.

The way it is is wrong because the fvar type returned isn't the same as the function return type.  They'd wind up being the same type in all of the applications we have in mind, but the code's easier to follow the simpler it is and the more things match.