Add more fs::path
operator/
and operator+
overloads to prevent unsafe string->path conversions on Windows that would cause strings to be decoded according to the current Windows locale & code page instead of the correct string encoding.
Update application code to deal with loss of implicit string->path conversions by calling fs::u8path
or fs::PathFromString
explicitly, or by just changing variable types from std::string
to fs::path
to avoid conversions altogether, or make them happen earlier.
In all cases, there’s no change in behavior either (1) because strings only contained ASCII characters and would be decoded the same regardless of what encoding was used, or (2) because of the 1:1 mapping between paths and strings using the PathToString
and PathFromString
functions.
Motivation for this PR was just that I was experimenting with #24469 and noticed that operations like fs::path / std::string
were allowed, and I thought it would be better not to allow them.