Like types integer and real, the types signed, unsigned, and std_logic_vector are different types.
One really cool thing about different types is they support independent overloading, hence, the “+” operator for signed is unique and different from the “+” operator for unsigned. If they automatically converted this would not be possible.