Move the introduction example into a cpp file, so it can be tested. Fix a bug and also avoid side-effects in asserts (thanks to Graham Mark for pointing issues these out).