Q:

Состояние формата ввода/вывода по умолчанию

При копировании состояния формата  ввода, обнаружил, что по умолчанию  оно не нулевое.  Решил провести тест: обнулить и смотреть что получается:
//обнуление всех флагов с сохранением старых
auto old_flags = cout.flags(0);
std::cout << "number of old flags cin/cout:  "
    << std::bitset<12>(old_flags).count()
    << "\nnumber of new flags: " << cout.flags();
//восстановление старых флагов
cout.setf(old_flags);

Полученный результат говорит о том, что по умолчанию были установлены два  формата, но после обнуления поток работает с таким же успехом.
P.S. Последный вывод выдает ноль. Это подтверждение того, что ни один формат  не установлен. 
Вопрос:
   Какие же форматы установлены по умолчанию и как они влияют на состояние потока?

A:

int main(int argc, const char * argv[])
{
    auto old_flags = cout.flags(0);
#define  fmt(x) cout << #x << ": " << (ios_base::x & old_flags) << endl
    fmt(dec);
    fmt(oct);
    fmt(hex);
    fmt(left);
    fmt(right);
    fmt(internal);
    fmt(scientific);
    fmt(fixed);
    fmt(floatfield);
    fmt(boolalpha);
    fmt(showbase);
    fmt(showpoint);
    fmt(showpos);
    fmt(skipws);
    fmt(unitbuf);
    fmt(uppercase);
}

Для Visual C++ 2017 дает ненулевые dec и skipws.
Для gcc, впрочем, то же самое: https://ideone.com/amWkcN

