Problema sutil de invocação do C++/WinRT e sua correção

2025-03-09
Problema sutil de invocação do C++/WinRT e sua correção

Um pull request do C++/WinRT corrigiu uma ambiguidade na chamada para `invoke` em `winrt::impl::promise_base::set_completed`, causada pela Pesquisa Dependente de Argumentos (ADL). A atualização para corrotinas C++20 expandiu o espaço de pesquisa ADL, encontrando inesperadamente `std::invoke` em vez do `winrt::impl::invoke` pretendido. O artigo detalha o mecanismo ADL e fornece uma correção para versões mais antigas do C++/WinRT: declarando uma função `invoke` mais adequada no namespace `winrt::Windows::Foundation` para guiar o compilador. Essa correção também inclui uma asserção estática para garantir que seja removida automaticamente após a atualização do C++/WinRT.

Desenvolvimento