Not sure if this is the smarter approach... I mean, at the end, a string value is a particular case of ComplexValue (BTW, I'd probably use a better name for complexValue, as "complex" is rather vague... maybe StructuredValue is better), i.e. type "leaf".

Maybe we should remove `value` in the .h and leave `complexValueP` or, even better, replace `std::string value` for `ComplexValue* value` (or, if we change the name of ComplexValue -> StructuredValue, then it should be `StructuredValue* value`).