30 Input/output library [input.output]

30.10 File systems [filesystems]

30.10.27 Class path [fs.class.path]

30.10.27.4 path members [fs.path.member]

30.10.27.4.3 path appends [fs.path.append]

Операции добавления используются operator/= для обозначения их семантического эффекта добавления preferred-separatorпри необходимости.

path& operator/=(const path& p);

Effects: Если p.is_­absolute() || (p.has_­root_­name() && p.root_­name() != root_­name()), то operator=(p).

В противном случае изменяется, *this как если бы эти шаги:

  • Если p.has_­root_­directory(), то удаляет любой корневой каталог и относительный путь из имени пути общего формата. В противном случае, если !has_­root_­directory() && is_­absolute() есть true или если has_­filename() есть true, то добавляется path​::​preferred_­separator к имени пути общего формата.

  • Затем добавляет путь в собственном формате p, исключая любые root-nameиз его имени пути общего формата, к имени пути в собственном формате.

[ Example: Даже если //host интерпретируются как root-name, оба пути path("//host")/"foo" и path("//host/")/"foo" равны "//host/foo".

Примеры выражений:

// On POSIX,
path("foo") / "";     // yields "foo/"
path("foo") / "/bar"; // yields "/bar"
// On Windows, backslashes replace slashes in the above yields

// On Windows,
path("foo") / "c:/bar";  // yields "c:/bar"
path("foo") / "c:";      // yields "c:"
path("c:") / "";         // yields "c:"
path("c:foo") / "/bar";  // yields "c:/bar"
path("c:foo") / "c:bar"; // yields "c:foo/bar"

end example]

Returns: *this.

template <class Source> path& operator/=(const Source& source); template <class Source> path& append(const Source& source);

Effects: Эквивалентен: return operator/=(path(source));

template <class InputIterator> path& append(InputIterator first, InputIterator last);

Effects: Эквивалентен: return operator/=(path(first, last));