Conversão Implícita de C ++ (Assinado + Não Assinado)

Compreendo que, em relação a conversões implícitas, se tivermos um operando de tipo não assinado e um operando de tipo assinado e o tipo de operando não assinado for igual a (ou maior) que o tipo do operando assinado, o operando assinado será convertido para não assinado.

Assim:

unsigned int u = 10;  
signed int s = -8;

std::cout << s + u << std::endl;

//prints 2 because it will convert `s` to `unsigned int`, now `s` has the value
//4294967288, then it will add `u` to it, which is an out-of-range value, so,
//in my machine, `4294967298 % 4294967296 = 2`

O que eu não entendo - eu li que se o operando assinado tiver um tipo maior que o operando não assinado:

Se todos os valores no tipo não assinado couberem no tipo maior, o operando não assinado será convertido para o tipo assinado.

Se os valores no tipo não assinado não couberem no tipo maior, o operando assinado será convertido para o tipo não assinado.

Então, no código a seguir:

signed long long s = -8;
unsigned int u = 10;
std::cout << s + u << std::endl;

u será convertido para assinado por muito tempo porque int valores podem caber em longo tempo assinado ??

Se for esse o caso, em que cenário os valores de tipo menores não caberão no maior?

questionAnswers(3)

yourAnswerToTheQuestion