result values of file_status(file_typeβ::βnot_found)
and file_status(file_typeβ::βunknown) are not considered failures and do not
cause an exception to be thrown.
This allows users to inspect the specifics of underlying
API errors even when the value returned by status() is not
file_status(file_typeβ::βnone).
Let prms denote the result of (m & permsβ::βmask),
where m is determined as if by converting the st_mode member
of the obtained struct stat to the type perms.
If the specific error indicates that p cannot be resolved
because some element of the path does not exist, returns
file_status(file_typeβ::βnot_found).
Otherwise, if the specific error indicates that p can be resolved
but the attributes cannot be determined, returns
file_status(file_typeβ::βunknown).
These semantics distinguish between p being known not to exist, p existing but not being able to determine its attributes,
and there being an error that prevents even knowing if p exists.
These
distinctions are important to some use cases.
Otherwise, if the attributes indicate an implementation-defined
file type ([fs.enum.file.type]),
returns file_status(file_typeβ::βA, prms),
where A is the constant for the
implementation-defined file type.