[libcxx-commits] [PATCH] D91138: [6/N] [libcxx] Handle backslash as path separator on windows

Martin Storsjö via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Tue Dec 1 23:10:10 PST 2020

mstorsjo added inline comments.

Comment at: libcxx/include/filesystem:1122
+#if defined(_LIBCPP_WIN32API)
+    std::replace(__pn_.begin(), __pn_.end(), '/', '\\');
amccarth wrote:
> 1.  It looks like most places are using `preferred_separator`, so is there a ever case where you'd have slashes instead of backslashes?
> 2.  If I've read correctly, the Windows version always uses wide characters, so maybe the character literals should be `L'/'` and `L'\\'` so that they naturally match the value type of the iterator.
1. Yes, the thing is that when a user constructs a path from a string that itself contains path separators, forward slashes are always considered a path separator (as platform agnostic separator), and backslashes work as separator too, on windows only. The filesystem::path internal representation of a path keeps them in whatever form they were input, but this modifier converts the path to the preferred (native) form. FWIW this is exactly what MS STL's version of make_preferred() does too.
2. Sure, that'd work. For these cases, the plain char form doesn't produce any warnings, but I can change it to wide char literals just for clarity.

  rG LLVM Github Monorepo



More information about the libcxx-commits mailing list