Thanks for the thorough review. A few replies below:
Schema.cc: Why did you implement two constructors for Schema instead of one constructor with the version parameter defaulted to DEFAULT_VERSION? Using one would reduce code.
I was a little worried about whether it was completely safe to use a class-static variable as a default value for an argument. I know you can run into problems in C++ when you initialize one static variable using another (http://www.parashift.com/c++-faq-lite/static-init-order.html), and I think default arguments are treated similarly to static variables. If you're pretty certain this is safe, I'd be happy to change it.
Schema.cc line 617:
int const Schema::DEFAULT_VERSION
What does this do? I'm guessing it pulls DEFAULT_VERSION into the current namespace, but if so, why bother?
Why not just use Schema::DEFAULT_VERSION in the one place it is used (a few lines later).
(If you do decide to use one constructor, then the default value can be set in the .h file, which avoids the need to use the constant in the .cc file).
When you initialize a const static int data member in the class declaration, it's not quite a complete declaration; you can use it in most contexts, but you can't take it's address, because C++ doesn't know what object file to compile that address into, as it would you initialize a static data member in a .cc file, which is what this line tells it (http://stackoverflow.com/questions/3025997/c-defining-static-const-integer-members-in-class-definition). I've found that sometimes Swig wrappers want the address, so this sort of line is necessary.
Schema.cc line 200: please consider moving the constructor before the operator. I think it would makes the code a bit clearer (based on some initial confusion on my part).
Will do (here and in other similar places in the file). I have a bad habit of putting constructors at the bottom of class definitions instead of at the top, because I often think about them last, so I'm glad you caught this, as I do recognize that it's easier to read the class if they come first.
Starting this now, as it's blocking something else I already have in progress.