5장. RHEL 10에서 주요 변경 사항
다음은 RHEL 10에서 발생하는 중요한 변경 사항입니다.
5.1. C++의 변경 사항 중단 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
std::condition_variable::wait는 이제 스레드 취소 지점입니다.-
GCC 11 및 이전 버전에서는
std::condition_variable::wait함수가제외되어 스레드 취소와 호환되지 않았습니다. 결과적으로pthread_cancel에 대한 호출이std::condition_variable::wait에서 차단된 스레드를 취소하면 프로세스가 종료됩니다. GCC 12 이상에서는 스택을 풀링 해제하는pthread_cancel함수에 대한 호출을 통해std::condition_variable::wait를 취소할 수 있습니다. 대기에 의존하는 코드가 있는 경우 예외를 throw하지 않는 경우 코드를 검토하고 적절한 작업을 수행합니다. - 더 이상 사용되지 않는 클래스 템플릿, 특정 클래스 템플릿은 새로운 버전의 C++에서 더 이상 사용되지 않으며 GCC 12 이상에서 경고 진단을 생성합니다.
다음 클래스 템플릿은 C++11 이상에서 더 이상 사용되지 않습니다.
-
std::unary_function -
std::binary_function
-
-
std::iterator클래스 템플릿이 C++17 이상에서 더 이상 사용되지 않습니다.
경고 진단을 방지하려면 다음 작업 중 하나를 수행할 수 있습니다.
코드를 다른 변경을 수행하지 않으려면 GCC의 진단 실습을 사용하여 경고 진단을 음소거하십시오. 예를 들면 다음과 같습니다.
#pragma GCC diagnostic push #pragma GCC diagnostic ignored “-Wdeprecated-declarations" class Functor : public std::unary_function<int, int> { /* … */ }; #pragma GCC diagnostic pop코드가 이후 버전의 C++와 호환되도록 하려면 코드에서 이러한 클래스 템플릿을 중첩된 typedefs로 교체합니다. 예를 들어
std::unary_function기본 클래스를result_type및argument_typetypedefs로 교체할 수 있습니다.class Functor { using result_type = int; using argument_type = int; /* … */ };