[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[.](#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[.](#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​::​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>​::​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>​::​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)