В этом коде:
vector<vector<int> > outer_vec;
outer_vec.push_back(vector<int> inner_vec); //THIS FAILS
но вот этот:
vector<vector<int> > outer_vec;
vector<int> inner_vec;
outer_vec.push_back(inner_vec); //THIS WORKS FINE
В общем, почему в первом случае объект inner_vec
не создается.