Modify BaseFormatter to help static analysers
Summary:
This decouples the format-string-parser from the storage of the arguments to be
formatted: a static analyser can now define a class which derives from
`BaseFormatter` with no storage and use `BaseFormatter::operator()` to verify
the syntax of the format string and determine which arguments will be
referenced.
This method of allowing overrides is resolved at compile time; the benchmarks
confirm that there is no run-time difference.
Reviewed By: yfeldblum
Differential Revision:
D4507689
fbshipit-source-id:
f109d81ae54dc074ac363720ef6e565520435d26