Похоже, что поддержка std::wstring в стандартной библиотеке для gcc/clang довольно плохая. Или я делаю что-то не так:
#include <fstream>
#include <string>
int main()
{
std::string a;
std::ifstream ifs(a); // fine
std::wstring b;
std::ifstream ifs2(b); // compilation error gcc/clang
return 0;
}
Я тестировал это на godbolt, и в основном он компилируется только под Windows.
Вы знаете, это задумано? Есть ли какие-нибудь переключатели компилятора, которые я мог бы использовать, чтобы он работал?
Обновлено: Спасибо за предложения. Это подтвердило, что я достаточно хорошо решил свою первоначальную задачу, а также узнал несколько новых вещей.
@StoryTeller-UnslanderMonica std::wifstream предназначен для чтения wchar_t символов из файла. Он не принимает std::wstring в качестве имени файла.





Стандартные файловые потоки C++ не принимают std::wstring в качестве имени файла.
В стандарте C++17 и более поздних версиях (и в MSVC в более ранних версиях) файловые потоки принимают const wchar_t* в качестве имени файла, но только в Windows, где std::filesystem::path::value_type соответствует wchar_t:
#include <fstream>
#include <string>
int main()
{
std::wstring b = ...;
//std::ifstream ifs(b); // compilation error
std::ifstream ifs(b.c_str()); // fine, but only on Windows
return 0;
}
Альтернативно, в стандарте C++17 и более поздних версиях вы можете открыть файловый поток, используя вместо этого std::filesystem::path, который можно создать из std::wstring имени файла:
#include <fstream>
#include <string>
#include <filesystem>
int main()
{
std::wstring b = ...;
std::filesystem::path p(b);
std::ifstream ifs(p);
return 0;
}