Канонический путь в C++
Функция canonical строит абсолютный путь
без символических ссылок и сегментов "..",
но принимает только путь к уже существующему
объекту.
Рабочий каталог процесса всегда есть на диске,
поэтому его удобно передать в вызов. Запишем
current_path и выведем каноническую
форму:
#include <filesystem>
#include <iostream>
std::filesystem::path here = std::filesystem::current_path();
std::filesystem::path neat = std::filesystem::canonical(here);
std::cout << neat.string() << "\n";
Если передать несуществующий путь, библиотека
бросит исключение - это отличает canonical
от более мягких нормализаций.
Возьмите std::filesystem::current_path,
передайте в std::filesystem::canonical
и выведите string результата.