У меня есть следующий код, чтобы нормализовать std :: fileystem :: path , чтобы всегда использовать прямые черты в качестве разделителей:
Код: Выделить всё
static decltype(auto) fix_path_separator(const std::filesystem::path& path) {
if constexpr (std::filesystem::path::preferred_separator == '/') {
return path;
} else {
auto s = path.native();
std::replace(
s.begin(),
s.end(),
std::filesystem::path::preferred_separator,
static_cast('/')
);
return std::filesystem::path{ s };
}
}
Я использую decktype (auto) Поскольку в системах Posix я хочу, чтобы эта функция была NOOP и возврата аргумента в качестве ссылки без создания копии, но для Windows мне нужна копия для изменения сепараторов. Этот код, по -видимому, работает, и я имею static_assert ', что он действительно возвращает Const Path & на posix и path в Windows, но я не совсем уверен, как он выведен. Но для Windows мне кажется, что я возвращаю путь && в качестве неназванного временного, а не пути .
может кто -нибудь предоставить мне правила вывода Decltype (Auto) , которые применяются здесь?>
Подробнее здесь:
https://stackoverflow.com/questions/797 ... references