Думаю, что-то сделаю с этим заказом:
stream.setf(std::skipws);
char open_bracket, close_bracket, colon;
unsigned num_items, temp_item;
stream >> open_bracket;
stream >> num_items;
stream >> colon;
for (int i=0; i<num_items; i++) {
stream >> temp_item;
temp_vec.push_back(temp_item);
}
stream >> close_bracket;
if (open_bracket != '[' || close_bracket != ']' || colon != ':')
stream.setstate(ios::failbit);
Обратите внимание, что бит для установки неудачного преобразования - бит бит, а не бит. badbit предназначен для таких вещей, как неудачная попытка чтения с диска.