[..] a type safe language does not allow you to assign a variable of one type to a variable of a different type (unless you perform an explicit conversion).
I don't think that this would be a good definition. Rather I'd say that a type safe language does not allow operations specific to / designed for a type X
to be performed on a value of a other type Y
if those two types are not considered compatible under some metric. That's what's known as strong typing (not to be confused with static typing).
Is this operation considered not type safe?
It's a well defined (albeit implicit) conversion from one type to another.
What seems to be bugging you is the part that this conversion is implicit and not explicit. I don't know of a distinct "term" / word to describe that a language allows implicit conversions, though.
That said, C++ surely is not type safe in all respects.