The goal here is to eventually delete the StringConvert class, as the llvm APIs for doing string to number conversion have a cleaner syntax.
In order to reduce code churn, since I was in this code anyway, I changed the deeply nested indentation of the code blocks I was touching to use early outs. This led me to get annoyed by the fact that every time we want to return something, it has to be 3 or 4 lines of code to open a scope, set the correct status on the error, set the message, eventually return, and then add another line of code to close the scope. We should be able to do all this in one line to further reduce boilerplate goo. So I added some code to Status to do this. Whereas before we would have to write this:
if (!succeed) { result.AppendError("some error"); result.SetStatus(eStatusFailed); return result.Succeeded(); }
which is 5 lines of code, now we only have to write:
if (!success) return result.AppendError(eStatusFailed, "some error");
which is only 2 lines.
There are more occurrences of StringConvert to change, but I wanted to get the feedback out of the way first before I go and do the rest.
Can you add a comment saying what these functions return? It's clear now that the code is in the header file, but that doesn't describe a contract just a current state, and anyway, will keep it clear if the code gets moved to the implementation file.