Problème subtil d'appel de fonction C++/WinRT et sa résolution

2025-03-09
Problème subtil d'appel de fonction C++/WinRT et sa résolution

Une requête d'extraction de C++/WinRT a corrigé une ambiguïté dans l'appel à `invoke` dans `winrt::impl::promise_base::set_completed`, causée par la recherche dépendante des arguments (ADL). La mise à jour vers les coroutines C++20 a élargi l'espace de recherche ADL, trouvant inopinément `std::invoke` au lieu de `winrt::impl::invoke`. L'article détaille le mécanisme ADL et fournit un correctif pour les anciennes versions de C++/WinRT : déclaration d'une fonction `invoke` mieux adaptée dans l'espace de noms `winrt::Windows::Foundation` pour guider le compilateur. Ce correctif inclut également une assertion statique pour garantir sa suppression automatique après la mise à jour de C++/WinRT.

Développement