I believe the intention is for this to only allow casting to the inner type, however the template parameter here would override the Base defined farther up. If the intention was instead to allow only for types that the Base type can implicitly convert to, then this needs a constraint, so that it fails to match the template, rather than failing to compile correctly due to mValue not implicitly converting to Base.