In the exists example, the variables are bound. You can assert 'b' instead of 'ex'. In 'b', the variables in xs are not bound and the model will assign values for free variables. Models do not assign values for bound variables.
solver s(c);
s.add(b); s.check();
model m = s.get_model();
std::cout<<m.eval(xs[1]) << "\n";