[fs.path.req]

# 31 Input/output library [[input.output]](./#input.output)

## 31.12 File systems [[filesystems]](filesystems#fs.path.req)

### 31.12.6 Class path [[fs.class.path]](fs.class.path#fs.path.req)

#### 31.12.6.4 Requirements [fs.path.req]

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L14074)

In addition to the requirements ([[fs.req]](fs.req "31.12.3 Requirements")),
function template parameters named Source shall be one of:

- [(1.1)](#1.1)

  basic_string<EcharT, traits, Allocator>[.](#1.1.sentence-1)
  A function
 argument const Source& source shall have an
 effective range [source.begin(), source.end())[.](#1.1.sentence-2)

- [(1.2)](#1.2)

  basic_string_view<EcharT, traits>[.](#1.2.sentence-1)
  A function
 argument const Source& source shall have an
 effective range [source.begin(), source.end())[.](#1.2.sentence-2)

- [(1.3)](#1.3)

  A type meeting the [*Cpp17InputIterator*](input.iterators#:Cpp17InputIterator "24.3.5.3 Input iterators [input.iterators]") requirements that iterates over an NTCTS[.](#1.3.sentence-1)
  The value type shall be an encoded character type[.](#1.3.sentence-2)
  A function argument const Source& source shall have an effective range
 [source, end) where end is the first
 iterator value with an element value equal to iterator_traits<Source>​::​value_type()[.](#1.3.sentence-3)

- [(1.4)](#1.4)

  A character array that after array-to-pointer decay results in a
 pointer to the start of an NTCTS[.](#1.4.sentence-1)
  The value type shall be an encoded character type[.](#1.4.sentence-2)
  A
 function argument const Source& source shall
 have an effective range [source, end) where end is the first iterator value with an element value equal to iterator_traits<decay_t<Source>>​::​value_type()[.](#1.4.sentence-3)

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L14099)

Functions taking template parameters named Source shall not participate in overload resolution unlessSource denotes a type other than path, and
either

- [(2.1)](#2.1)

Source is a specialization ofbasic_string or basic_string_view, or

- [(2.2)](#2.2)

the [*qualified-id*](expr.prim.id.qual#nt:qualified-id "7.5.5.3 Qualified names [expr.prim.id.qual]") iterator_traits<decay_t<Source>>​::​value_type is valid and
denotes a possibly const encoded character type ([[temp.deduct]](temp.deduct "13.10.3 Template argument deduction"))[.](#2.sentence-1)

[3](#3)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L14113)

[*Note [1](#note-1)*:

See [path conversions](fs.path.cvt "31.12.6.3 Conversions [fs.path.cvt]") for how the value types above and their encodings convert topath​::​value_type and its encoding[.](#3.sentence-1)

â *end note*]

[4](#4)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L14120)

Arguments of type Source shall not be null pointers[.](#4.sentence-1)
