path lexically_normal() const;
(1) (since C++17)path lexically_relative( const path& base ) const;
(2) (since C++17)path lexically_proximate( const path& base ) const;
(3) (since C++17) 1)Returns
*thisconverted to
normal formin its generic format.
2)Returns
*thismade relative to
base.
[
a,
end())
.3) If the value of lexically_relative(base) is not an empty path, return it. Otherwise return *this.
[edit] Parameters(none)
[edit] Return value1) The normal form of the path.
2) The relative form of the path.
3) The proximate form of the path.
[edit] ExceptionsMay throw implementation-defined exceptions.
[edit] NotesThese conversions are purely lexical. They do not check that the paths exist, do not follow symlinks, and do not access the filesystem at all. For symlink-following counterparts of lexically_relative
and lexically_proximate
, see relative and proximate.
On Windows, the returned path
has backslashes (the preferred separators).
On POSIX, no filename in a relative path is acceptable as a root-name.
[edit] Example#include <cassert> #include <filesystem> #include <iostream> namespace fs = std::filesystem; int main() { assert(fs::path("a/./b/..").lexically_normal() == "a/"); assert(fs::path("a/.///b/../").lexically_normal() == "a/"); assert(fs::path("/a/d").lexically_relative("/a/b/c") == "../../d"); assert(fs::path("/a/b/c").lexically_relative("/a/d") == "../b/c"); assert(fs::path("a/b/c").lexically_relative("a") == "b/c"); assert(fs::path("a/b/c").lexically_relative("a/b/c/x/y") == "../.."); assert(fs::path("a/b/c").lexically_relative("a/b/c") == "."); assert(fs::path("a/b").lexically_relative("c/d") == "../../a/b"); assert(fs::path("a/b").lexically_relative("/a/b") == ""); assert(fs::path("a/b").lexically_proximate("/a/b") == "a/b"); }[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR Applied to Behavior as published Correct behavior LWG 3070 C++17 a filename that can also be a root-name may cause surprising result treated as error case LWG 3096 C++17 trailing "/" and "/." are handled incorrectly corrected [edit] See alsoRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4