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

From cppreference.com
< cpp‎ | filesystem‎ | path

template< class CharT, class Traits > std::basic_ostream<CharT,Traits>& operator<<( std::basic_ostream<CharT,Traits>& os, const std::filesystem::path& p ); | (1) | (since C++17)
template< class CharT, class Traits > std::basic_istream<CharT,Traits>& operator>>( std::basic_istream<CharT,Traits>& is, std::filesystem::path& p ); | (2) | (since C++17)

Performs stream input or output on the path `p`. std::quoted is used so that spaces do not cause truncation when later read by stream input operator.

These function templates are not visible to ordinary unqualified or qualified lookup , and can only be found by argument-dependent lookup when std::filesystem::path is an associated class of the arguments. This prevents undesirable conversions in the presence of a using namespace std::filesystem; using-directive.

### Parameters

os | - | stream to perform output on
is | - | stream to perform input on
p | - | path to insert or extract

### Return value

1) os
2) is

### Exceptions

(none)

### 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 2989 | C++17 | allowed insertion of everything convertible to `path` in the presence of a using-directive | made hidden friend

### Possible implementation

First version

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

Second version

    template< class CharT, class Traits >
    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;
    }

### Example

Run this code

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

Possible output:

    "/home/user"

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/filesystem/path/operator_ltltgtgt&oldid=105069"