std::filesy...ric_wstring,(3)

๐Ÿ“ฆ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

๐ŸŒŸ std::filesystem::path::generic_string, std::filesystem::path::generic_wstring ๐ŸŒŸ

okay bestie, welcome to the std::filesy...ric_wstring,(3) page from the C++ Standard Libary manual โœจ (that spelling is the manual's, not a typo I made, iykyk). It's giving filesystem path string energy, and we're getting through every single signature together โ€” no skipped markers, no missing overloads, periodt ๐Ÿ’…

๐ŸŽ€ NAME ๐ŸŽ€

std::filesystem::path::generic_string,std::filesystem::path::generic_wstring,
-
std::filesystem::path::generic_string,std::filesystem::path::generic_wstring,

โœจ Synopsis โœจ

yes, the spacing is a whole vibe, but every piece is here: the template<...>, the (1) / (2) / (3) markers, the since C++17 / until C++20 / since C++20 notes, and all the generic_*string() overloads ๐Ÿซถ

                                std::filesystem::path::generic_u32string

          template< class CharT, class Traits =
          std::char_traits<CharT>,
                                                                          (since
                    class Alloc = std::allocator<CharT> >             (1)
       C++17)
          std::basic_string<CharT,Traits,Alloc>

              generic_string( const Alloc& a = Alloc() ) const;
          std::string generic_string() const;
          std::wstring generic_wstring() const;
          std::u16string generic_u16string() const;
          std::u32string generic_u32string() const;
                                                                      (2)
       (since       (since
          std::string generic_u8string() const;
       C++17)       (since
       C++17)
                                                                                  (3)
       (until
                                                                                       C++20)
          std::u8string generic_u8string() const;
       (since
                                                                                       C++20)

so what does it actually do? It returns the internal pathname in generic pathname format, converted to the specific string type. Conversion, if any, is specified as follows:

  • If path::value_type is char, conversion, if any, is system-dependent. This is the case on typical POSIX systems (such as Linux), where native encoding is UTF-8 and string() performs no conversion.
  • Otherwise, if path::value_type is wchar_t, conversion, if any, is unspecified. This is the case on Windows, where wchar_t is 16 bit and the native encoding is UTF-16.
  • Otherwise, if path::value_type is char16_t, native encoding is UTF-16 and the conversion method is unspecified.
  • Otherwise, if path::value_type is char32_t, native encoding is UTF-32 and the conversion method is unspecified.
  • Otherwise, if path::value_type is char8_t, native encoding is UTF-8 and the conversion method is unspecified.

The / character is used as the directory separator ๐ŸŽ€

  1. All memory allocations are performed by a.
  2. The result encoding in the case of u8string() is always UTF-8.
yes, the list literally starts at 1 and jumps to 3 โ€” that's the manual's numbering, not me losing a bullet ๐Ÿ˜ญ

๐Ÿ’– Parameters ๐Ÿ’–

  • a โ€” allocator to construct the string with.

๐Ÿฆ‹ Type requirements ๐Ÿฆ‹

  • CharT must be one of the encoded character types (char, wchar_t, char8_t (since C++20), char16_t and char32_t).

๐ŸŒธ Return value ๐ŸŒธ

The internal pathname in generic pathname format, converted to specified string type. iconic, honestly ๐Ÿ‘‘

๐Ÿ”ฅ Exceptions ๐Ÿ”ฅ

May throw implementation-defined exceptions.

๐Ÿ“ Example ๐Ÿ“

// Run this code

#include <cstddef>
#include <filesystem>
#include <iomanip>
#include <iostream>
#include <span>
#include <string_view>

void print(std::string_view rem, auto const& str)
{
    std::cout << rem << std::hex << std::uppercase << std::setfill('0');
    for (const auto b : std::as_bytes(std::span{str}))
        std::cout << std::setw(2) << std::to_integer<unsigned>(b) << ' ';
    std::cout << '\n';
}

int main()
{
    std::filesystem::path p{"/ๅฎถ/ๅฑ‹"};
    std::cout << p << '\n';

    print("string    : ", p.generic_string());
    print("u8string  : ", p.generic_u8string());
    print("u16string : ", p.generic_u16string());
    print("u32string : ", p.generic_u32string());
    print("wstring   : ", p.generic_wstring());
}

๐ŸŒˆ Possible output ๐ŸŒˆ

"/ๅฎถ/ๅฑ‹"
string    : 2F E5 AE B6 2F E5 B1 8B
u8string  : 2F E5 AE B6 2F E5 B1 8B
u16string : 2F 00 B6 5B 2F 00 4B 5C
u32string : 2F 00 00 00 B6 5B 00 00 2F 00 00 00 4B 5C 00 00
wstring   : 2F 00 00 00 B6 5B 00 00 2F 00 00 00 4B 5C 00 00

๐Ÿ‘‘ See also ๐Ÿ‘‘

  • string
  • wstring โ€” returns the path in native pathname format converted to a string
  • u8string โ€” (public member function)
  • u16string
  • u32string

๐Ÿงš Category ๐Ÿงš

  • Uses of dcl rev begin with nonempty note

source/version + date + footer, wrapped up cute: http://cppreference.com ยท 2024.06.10 ยท std::filesy...ric_wstring,(3) ๐Ÿ’…โœจ

๐Ÿ“ฆ where this page comes from