a small convenience feature: it is easy to forget calling .parse(). It would help if the destructor of the parser checks if the function was called and throws a logic_error("You forgot to call .parse()") if it was not the case.
Note, that you explicitly need to mark a destructor as noexcept(false) if you want to throw from it.