В моей кодовой базе есть две функции:
void save(bar::binary_oarchive &ar)
{
bool flag = //some condition
ar & flag;
//do some work
}
void load(bar::binary_iarchive &ar)
{
bool flag = false;
ar & flag;
//do some work
}
Теперь мой код дает сбой при оценке ar & flag
из load
.Я немного отладил и обнаружил, что
void load(bool & t){
load_binary(& t, sizeof(t));
int i = t;
BOOST_ASSERT(0 == i || 1 == i);
(void)i; // warning suppression for release builds.
}
будет вызываться boost внутри.Теперь проблема в том, что load_binary(& t, sizeof(t))
каким-то образом изменяет значение t
и устанавливает для него значение, отличное от 0 и 1. (В моем случае это значение равно 8), что приводит к BOOST_ASSERT(0 == i || 1 == i)
.
1.Как выяснить, что было состояние ar
после того, как save
завершил свою работу.
2. Поскольку load_binary
устанавливает t
в какое-то значение, которое я предполагаюустановка путем чтения ar
с некоторого определенного смещения.Откуда я на самом деле знаю, что часть ar
читается? (Поправьте меня, если я ошибаюсь)