The only parameter of GetDefaultPawnClassForController defined in GameModeBase is never used ?

UClass* AGameModeBase::GetDefaultPawnClassForController_Implementation(AController* InController)
{
#if WITH_EDITOR && DO_CHECK
	UClass* DefaultClass = DefaultPawnClass.DebugAccessRawClassPtr();
	if (DefaultClass)
	{
		if (FBlueprintSupport::IsClassPlaceholder(DefaultClass))
		{
			ensureMsgf(false, TEXT("Trying to spawn class that is, directly or indirectly, a placeholder"));
			return ADefaultPawn::StaticClass();
		}
	}
#endif
	return DefaultPawnClass;
}

I guess Parameter ‘InController’ is never used ?

No it’s not.
That’s for you to use it, if you want different pawn classes for different players. That function is meant to be overriden by developers, if needs be.