This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++17 status.
Section: 31.12.6.5.3 [fs.path.append] Status: C++17 Submitter: Tim Song Opened: 2016-06-14 Last modified: 2017-07-30
Priority: 2
View all other issues in [fs.path.append].
View all issues with C++17 status.
Discussion:
The current specification of operator/= taking a const Source& parameter, and of path::append in 31.12.6.5.3 [fs.path.append] appears to require Source to have a native() and an empty() member, and seemingly requires different behavior for append(empty_range) and append(first, last) when first == last (the last two bullet points being specified with source alone), which doesn't make any sense.
It appears that these overloads can just be specified using the operator/=(const path&) overload.[2016-07-03, Daniel comments]
The same wording area is affected by LWG 2664.
[2016-08 Chicago]
Wed AM: Move to Tentatively Ready
Friday AM, in discussing 2664 a comment about missing "equivalent to" language was made, so PR updated.
Previous Resolution [SUPERSEDED]
This wording is relative to N4594.
Edit 31.12.6.5.3 [fs.path.append]/4-5 as indicated:
template <class Source> path& operator/=(const Source& source); template <class Source> path& append(const Source& source);-?- Effects: operator/=(path(source))
-?- Returns: *this.template <class InputIterator> path& append(InputIterator first, InputIterator last);-4- Effects:
Appends path::preferred_separator to pathname, converting format and encoding if required (31.12.6.3 [fs.path.cvt]), unless:
an added directory-separator would be redundant, or
an added directory-separator would change an relative path to an absolute path, or
source.empty() is true, or
*source.native().cbegin() is a directory-separator.-5- Returns: *this.
Then appends the effective range of source (31.12.6.4 [fs.path.req]) or the range [first, last) to pathname, converting format and encoding if required (31.12.6.3 [fs.path.cvt])operator/=(path(first, last)).
Proposed resolution:
This wording is relative to N4606.
Edit 31.12.6.5.3 [fs.path.append]/4-5 as indicated:
template <class Source> path& operator/=(const Source& source); template <class Source> path& append(const Source& source);-?- Effects: Equivalent to return operator/=(path(source));.
template <class InputIterator> path& append(InputIterator first, InputIterator last);-4- Effects: Equivalent to return operator/=(path(first, last));.
Appends path::preferred_separator to pathname, converting format and encoding if required (31.12.6.3 [fs.path.cvt]), unless:
— an added directory-separator would be redundant, or— an added directory-separator would change an relative path to an absolute path, or— source.empty() is true, or— *source.native().cbegin() is a directory-separator.
Then appends the effective range of source (31.12.6.4 [fs.path.req]) or the range [first, last) to pathname, converting format and encoding if required (31.12.6.3 [fs.path.cvt]).
-5- Returns: *this.