C++/버그 리포트(Bug report) 2

[BUG] Apple Clang std::hardware_xxx_interference_size

Apple Clang 컴파일러 버그 1. 설명 C++17부터는 true sharing 이 일어나는 메모리의 최대 크기와, 그 반대인 false sharing이 일어나는 메모리의 최소 크기를 얻어오는 표준이 지정되었습니다. Sharing은 보통 멀티스레드 환경에서 캐시 동기화때문에 일어나게 되는데, 보다 자세한 내용은 다른 글에서 다루도록 하겠습니다. 두 값 모두 실제 CPU의 캐시 라인과 관련이 있습니다. 하지만 실제로 이 표준을 구현하는 컴파일러는 2021년 8월 현재로써는 마이크로소프트의 컴파일러 뿐이고, 다른 계열들은 해당 표준을 구현하지 않았습니다. 대신 구현 여부를 매크로로 알아낼 수 있는데, Apple Clang에서는 해당 매크로조차 잘못 정의가되어 있는 상황입니다. 2. 예시 해당 표준이 구..

[BUG Report] MSVC(C++20) Closure type's special member function

마이크로소프트 컴파일러 C++20 feature 버그 1. 서론 C++20 에서 Closure type 이 이제 캡처가 없는 경우 특수 멤버 함수(기본 생성, 복사/이동 연산)를 제공하게 되었습니다. 여기서, 캡처가 없다는것은 실제로 내부에선 캡처된 객체를 사용하지 않더라도, 무조건 코드상에 캡처가 표시가 되어있는가를 기준으로 판단되어집니다. Proposal cppreference expr.prim.lambda_closure 2. 예시 int x = 1; auto lambda1 = []() { return 1; }; auto lambda2 = [&]() { return x; }; auto lambda3 = [&]() { return 1; }; 위에서 말했듯이, 실제 내부적으로 캡처된것이 사용되는지의 여부..