Я сделал небольшой патч, чтобы исправить эту проблему. Он добавляет пару предварительных объявлений, чтобы можно было найти необходимые имена с двухфазным поиском и отсутствующим ключевым словом template
.
C: \ Program Files (x86) \ Windows Kits \ 10 \ Include \ 10.0.17134.0 \ cppwinrt \ winrt \ base.h
2171a2172,2189
> template <typename D, typename I, typename Enable = void>
> struct producer;
> }
>
> WINRT_EXPORT namespace winrt
> {
> template <typename D, typename I>
> D* from_abi(I const& from) noexcept;
>
> template <typename I, typename D, std::enable_if_t<std::is_base_of_v<Windows::Foundation::IUnknown, I>>* = nullptr>
> impl::abi_t<I>* to_abi(impl::producer<D, I> const* from) noexcept;
>
> template <typename I, typename D, std::enable_if_t<std::is_base_of_v< ::IUnknown, I>>* = nullptr>
> impl::abi_t<I>* to_abi(impl::producer<D, I> const* from) noexcept;
> }
>
> namespace winrt::impl
> {
6244c6262
< template <typename D, typename I, typename Enable = void>
---
> template <typename D, typename I, typename Enable>
6353c6371
< template <typename I, typename D, std::enable_if_t<std::is_base_of_v<Windows::Foundation::IUnknown, I>>* = nullptr>
---
> template <typename I, typename D, std::enable_if_t<std::is_base_of_v<Windows::Foundation::IUnknown, I>>*>
6359c6377
< template <typename I, typename D, std::enable_if_t<std::is_base_of_v< ::IUnknown, I>>* = nullptr>
---
> template <typename I, typename D, std::enable_if_t<std::is_base_of_v< ::IUnknown, I>>*>
7189c7207
< return root_implements_type::get_weak<D>();
---
> return root_implements_type::template get_weak<D>();