Спецификатор формата %d
предназначен для аргументов размером целых чисел, поэтому функция printf
ожидает два аргумента, оба размером int
. Однако вы предоставляете ему один аргумент, который не int
, а специальный объект, возвращаемый vector<bool>
, который можно преобразовать в bool
.
Это в основном заставляет функцию printf
обрабатывать случайные байты из стека как часть значений, хотя на самом деле это не так.
Решение состоит в том, чтобы привести первый аргумент к int
:
printf("%d %d\n", static_cast<int>(a[0]), t);
Еще лучшим решением было бы предпочесть потоки, а не printf
, если это вообще возможно, потому что в отличие от printf
они безопасны от типов, что делает невозможным возникновение такой ситуации:
cout << a[0] << " " << t << endl;
И если вы ищете безопасную альтернативу для printf
-подобного форматирования, рассмотрите возможность использования библиотеки Boost Format .