Help with returning values

Im studying the ShooterGame example from the market place, and while looking at the run code I stopped at this:

ool AShooterCharacter::IsRunning() const
{	
	if (!GetCharacterMovement())
	{
		return false;
	}
	
	return (bWantsToRun || bWantsToRunToggled) && !GetVelocity().IsZero() && (GetVelocity().GetSafeNormal2D() | GetActorRotation().Vector()) > -0.1;
}

What value is returning the function? Sorry but this is confusing me a lot.

Yes, similar things were through my mind, but I thought the function was returning multiple values, which is not possible.

Lets break this down:

(bWantsToRun || bWantsToRunToggled)
So for this, if the character ‘wants to run’ OR wants to ‘toggle run’, then the value is true. But we have more,

!GetVelocity().IsZero()
This will test if the velocity is NOT zero. Because there is a ‘!’ in front of the GetVelocity, it changed the statement to NOT. So if the Velocity is NOT zero then true.

There is more:
I unfortunately don’t understand this part here.
(GetVelocity().GetSafeNormal2D() | GetActorRotation().Vector()) > -0.1;

But, as long as every thing above returned True(True && True && True), then the function will return true.

But if anything was false, the function would return false.

Sorry if this is hard to understand. Hope this helped!