Namespaces
Variants

operator<<,>> (std::filesystem::path)

From cppreference.net
template < class CharT, class Traits >

friend std:: basic_ostream < CharT,Traits > &

operator << ( std:: basic_ostream < CharT,Traits > & os, const path & p ) ;
(1) (начиная с C++17)
template < class CharT, class Traits >

friend std:: basic_istream < CharT,Traits > &

operator >> ( std:: basic_istream < CharT,Traits > & is, path & p ) ;
(2) (начиная с C++17)

Выполняет потоковый ввод или вывод для пути p . std:: quoted используется для предотвращения усечения при последующем чтении оператором потокового ввода из-за пробелов.

Эти шаблоны функций не видны при обычном unqualified или qualified lookup , и могут быть найдены только с помощью argument-dependent lookup , когда std::filesystem::path является ассоциированным классом аргументов. Это предотвращает нежелательные преобразования при наличии using namespace std :: filesystem ; using-directive .

Содержание

Параметры

os - поток для выполнения вывода
is - поток для выполнения ввода
p - путь для вставки или извлечения

Возвращаемое значение

1) os
2) is

Исключения

Может генерировать исключения, определяемые реализацией.

Возможная реализация

operator<<
template<class CharT, class Traits>
friend std::basic_ostream<CharT,Traits>&
    operator<<(std::basic_ostream<CharT,Traits>& os, const path& p)
{
    os << std::quoted(p.string<CharT,Traits>());
    return os;
}
operator>>
template<class CharT, class Traits>
friend std::basic_istream<CharT,Traits>&
    operator>>(std::basic_istream<CharT,Traits>& is, path& p)
{
    std::basic_string<CharT, Traits> t;
    is >> std::quoted(t);
    p = t;
    return is;
}

Пример

#include <filesystem>
#include <iostream>
int main()
{
    std::cout << std::filesystem::current_path() << '\n';
    std::cout << std::filesystem::temp_directory_path() << '\n';
}

Возможный вывод:

"/home/user"
"/tmp"

Отчёты о дефектах

Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 2989 C++17 allowed insertion of everything convertible to path in the presence of a using-directive made hidden friend