boostorg / program_options

Boost.org program_options module
http://boost.org/libs/program_options
110 stars 107 forks source link

Gaps between specification and implementation in typed_value::composing() #124

Open mdj982 opened 1 year ago

mdj982 commented 1 year ago

Description and Reproduction

Consider Example 63.2 (Execution on Wandbox)

test --phone 123 --phone 456
In this case, both phone numbers, 123 and 456, are parsed. The call to composing() makes it possible to use a command-line option multiple times – the values are composed.

From this description, it would seem that, conversely, without the call to composing(), only 123 would be assigned to the --phone option but 456 would be ignored. (I assume this is the specification. Is my understanding correct?)

However, even after removing composing(), both 123 and 456 are assigned to --phone. (Execution on Wandbox)

On the other hand, in order to confirm the effect of composing() in the current implementation, when store() is called twice, we can see that the result changes depending on whether composing() is called or not.

Implementation Analysis

From what I've seen of the implementation of Boost 1.81.0, these lines are suspect.

The intuitive image from the description of Example 63.2 is an implementation in which:

Summary

Version