type promotion stuff