C++/WinRT의 미묘한 invoke 문제와 해결책

2025-03-09
C++/WinRT의 미묘한 invoke 문제와 해결책

C++/WinRT의 pull request를 통해 `winrt::impl::promise_base::set_completed`에서 `invoke` 호출의 모호성이 수정되었습니다. 이는 인수 종속 조회(ADL)로 인해 발생했습니다. C++20 코루틴으로 업그레이드하면서 ADL 검색 범위가 확장되어 의도한 `winrt::impl::invoke` 대신 `std::invoke`가 잘못 감지되었습니다. 이 기사에서는 ADL 메커니즘을 자세히 설명하고 이전 버전의 C++/WinRT에 대한 패치를 제공합니다. `winrt::Windows::Foundation` 네임스페이스에 더 적합하게 일치하는 `invoke` 함수를 선언하여 컴파일러를 올바른 함수로 유도합니다. 이 패치에는 C++/WinRT 업그레이드 후 자동으로 무효화되는 정적 어설션도 포함되어 있습니다.

개발