How do i remove items from a TArray while iterating?

If you need to use local variables you can use this [&WorldTimeSeconds] or [WorldTimeSeconds] or [&]:

const float WorldTimeSeconds = GetWorld()->TimeSeconds;
...
if (bHasExpiredMessage)
{
	ChatMessages.RemoveAll([WorldTimeSeconds](FHUDMessage& HUDMessage){
		return HUDMessage.IsExpired(WorldTimeSeconds);
	});
}