The behavior of the NumberParser functions are a bit inconsistent in these cases:
This results in 12, when it should throw an exception.
I looked at the implementation and found this at tryParse:
return sscanf(s.c_str(), "%d", &value) == 1;
The sscanf behavior is parse until find something unknown, so I sugest this implementation to this and the other parser function:
return sscanf(s.c_str(), "%d%c", &value, &temp) == 1;^
That way it would produce an exception on the input mentioned above, that is a better behavior (at least the behavior I would excpect).