새로운 std::codecvt_byname
이 성공했는지 확인하는 표준 방법이 있습니까?새 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
객체를 throw에. 그러나 Microsoft Visual C++의 STL 구현은 예외를 throw하지 않습니다.
어떤 C++ 컴파일러가 코드를 컴파일할지 모르는 경우 새로운 std::codecvt_byname
의 생성이 성공했는지 어떻게 확인합니까? 또는, 메모리 부족 시나리오가 없다고 가정하여 성공 여부를 확인하는 방법이 있습니까?