std::filesy...ke_preferred(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

✨ NAME ✨

This is the manual page for std::filesy...ke_preferred(3) from the C++ Standard Libary β€” yes, β€œLibary” is literally how the header spells it, bestie, and we respect the typo. πŸ’…

  • std::filesystem::path::make_preferred β€” std::filesystem::path::make_preferred (that’s the NAME entry, and yes, it is just the function naming itself twice; iconic, no notes).

🌸 Synopsis 🌸

path& make_preferred();  (since C++17)

Okay so here’s the vibe: it converts all directory separators in the generic-format view of the path to the preferred directory separator. ✨

For example, on Windows, where \ is the preferred separator, the path foo/bar will be converted to foo\bar. Slay.


πŸŽ€ Parameters πŸŽ€

None. Literally (none) β€” no parameters, no args, zero, zilch. 🫢


πŸ‘‘ Return value πŸ‘‘

*this β€” it hands you back *this, periodt. πŸ’–


πŸ¦‹ Exceptions πŸ¦‹

May throw implementation-defined exceptions. That’s the whole warning, bestie β€” implementation-defined means exactly what it says. πŸ™ˆ


🌈 Example 🌈

// Run this code β€” like the page says, run it:

#include <filesystem>
#include <iostream>

int main()
{
    std::filesystem::path
        windows_path("a\\b\\c"),
        posix_path("a/b/c");

    std::cout
        << "Windows path: "
        << windows_path << " -> "
        << windows_path.make_preferred() << '\n'
        << "POSIX path: "
        << posix_path << " -> "
        << posix_path.make_preferred() << '\n';
}

Windows can use / as a separator, but prefers \, so make_preferred converts the forward slashes to backslashes. On the other hand, POSIX does not use \ as a separator, because backslashes are valid filename characters β€” the Windows path on POSIX actually refers to a file with the name "a\\b\\c". For this reason the β€œseparators” are not converted. It’s giving platform differences, fr fr. 😭

πŸ’» Output πŸ’»

// on Windows
Windows path: "a\\b\\c" -> "a\\b\\c"
POSIX path: "a/b/c" -> "a\\b\\c"

// on POSIX
Windows path: "a\\b\\c" -> "a\\b\\c"
POSIX path: "a/b/c" -> "a/b/c"

πŸ’œ See also πŸ’œ

  • preferred_separator β€” a constexpr value_type, [static] (public static member constant). It’s the alternative directory separator which may be used in addition to the portable /. On Windows, this is the backslash character \. On POSIX, this is the same forward slash / as the portable separator. πŸ¦‹

Source/version: http://cppreference.com, dated 2024.06.10, and the page title is std::filesy...ke_preferred(3) β€” that’s the footer, now with a little bow on it πŸŽ€βœ¨πŸ’–

πŸ“¦ where this page comes from