-
Notifications
You must be signed in to change notification settings - Fork 111
Description
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?)
- It seems that there are others who have a similar understanding:
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.
- Twice
store()
withcomposing()
: Execution on Wandbox - Twice
store()
withoutcomposing()
: Execution on Wandbox
Implementation Analysis
From what I've seen of the implementation of Boost 1.81.0, these lines are suspect.
- In the first for loop to proceed the parsed options (L48-L93)
- After the first for loop,
xm.m_final
is modified bynew_final
(L102)
The intuitive image from the description of Example 63.2 is an implementation in which:
- Deleting L102.
- Modifying L91 to
xm.m_final.insert(option_name)
Summary
- There seems to be a gap between the specification (which I can intuitively read from Example 63.2) and the implementation.
- I would like to clarify if my understanding is wrong or if either the description of Example 63.2 or implementation is incorrect.
Version
- Boost 1.81.0