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) (depuis C++17)
template < class CharT, class Traits >

friend std:: basic_istream < CharT,Traits > &

operator >> ( std:: basic_istream < CharT,Traits > & is, path & p ) ;
(2) (depuis C++17)

Effectue une entrée ou une sortie de flux sur le chemin p . std:: quoted est utilisé afin que les espaces ne provoquent pas de troncation lors d'une lecture ultérieure par l'opérateur d'entrée de flux.

Ces modèles de fonction ne sont pas visibles par la recherche non qualifiée ou qualifiée ordinaire, et ne peuvent être trouvés que par la recherche dépendante des arguments lorsque std::filesystem::path est une classe associée des arguments. Cela empêche les conversions indésirables en présence d'une using namespace std :: filesystem ; directive using .

Table des matières

Paramètres

os - flux sur lequel effectuer la sortie
is - flux sur lequel effectuer l'entrée
p - chemin à insérer ou extraire

Valeur de retour

1) os
2) is

Exceptions

Peut lever des exceptions définies par l'implémentation.

Implémentation possible

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;
}

Exemple

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

Sortie possible :

"/home/user"
"/tmp"

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
LWG 2989 C++17 autorisait l'insertion de tout élément convertible en path en présence d'une using-directive rendu ami caché