Are std :: showbase y std :: showpos mutuamente excluyentes?

sta pregunta surgió de una discusión que estaba teniendo sobre la forma correcta de generar un valor numérico usando la @ habituostream & operator << (ostream &, some_type) para un tipo numérico en C ++.

La forma en que estoy familiarizado con el comportamiento de std :: showbase y std :: showpos en cada base, son básicamente mutuamente excluyentes. Es decir: en decimal no se muestra ninguna base, y el '+' se agrega en números positivos; mientras que en hexadecimal u octal, se muestra la base, pero no se muestra un '+' (ni un signo menos), ya que el valor del tipo se imprime como si se convirtiera en un tipo sin signo.

Por ejemplo, este programa simple (detallado):

#include <iostream>

int main() {
  std::cout << std::dec << std::showpos << std::showbase << int64_t(+5) << std::endl;
  std::cout << std::oct << std::showpos << std::showbase << int64_t(+5) << std::endl;
  std::cout << std::hex << std::showpos << std::showbase << int64_t(+5) << std::endl;
  std::cout << std::dec << std::showpos << std::showbase << int64_t(-5) << std::endl;
  std::cout << std::oct << std::showpos << std::showbase << int64_t(-5) << std::endl;
  std::cout << std::hex << std::showpos << std::showbase << int64_t(-5) << std::endl;
}

Da este resultado cuando se compila con GCC:

+5
05
0x5
-5
01777777777777777777773
0xfffffffffffffffb

Esto es lo que siempre he esperado, después de haber usado C ++ durante muchos años, pero ¿está realmente garantizado por el estándar o es solo un comportamiento común? Por ejemplo, ¿podría un compilador C ++ compatible con el estándar generar una de estas secuencias en su lugar?

+5
+05
+0x5
-5
01777777777777777777773
0xfffffffffffffffb

o incluso

+5
+05
+0x5
-5
-05
-0x5

Respuestas a la pregunta(4)

Su respuesta a la pregunta