Есть ли стандартный способ проверить, успешно ли сконструировано новое std::codecvt_byname
?
Я экспериментировал со следующей программой:
// cl /nologo /Fetest_codecvt_byname.exe /EHsc test_codecvt_byname.cpp && test_codecvt_byname
// g++ -o test_codecvt_byname test_codecvt_byname.cpp && test_codecvt_byname
#include <cstdlib>
#include <iostream>
#include <locale>
#include <new>
#include <stdexcept>
int main()
{
try {
new std::codecvt_byname<wchar_t, char, mbstate_t>(".nonsense");
} catch (const std::exception& ex) {
std::cerr << "Error: " << ex.what() << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
libstdc ++ в Windows, по-видимому, выдает std::runtime_error
объект, если названная локаль не поддерживается.Однако реализация STL в Microsoft Visual C ++ не выдает исключение.
Не зная, какой компилятор C ++ скомпилирует код, как проверить, успешно ли построено новое std::codecvt_byname
?В качестве альтернативы, есть ли способ проверить, будет ли построение успешным, если не будет сценария нехватки памяти?