That is natural, since Viorel was actually referring to ::IUnknown. Not the C++/WinRT projection. Please notice that the type that Viorel mentioned does not have any namespaces, it is the IUnknown interface in the global namespace. Also please notice the *, this is not a mistake. This was a cast to IUnknown *.
There are two ways to put an ABI instance into Windows.Foundation.IUnknown so that the projection will destroy the instance.
First, there is winrt::attach_abi.
winrt::Windows::Foundation::IUnknown unknown{nullptr};
winrt::attach_abi(unknown, store);
//Remove this pointer to avoid any usage beyond this point.
store = nullptr;
winrt::attach_abi will attach the ABI type to the projection instance without incrementing the reference count. This is why the above code snippet instantly resets the pointer. When the projection instance goes out of scope, the object that was attached will have Release automatically called.
The second option is to use something that is a little less documented. The constructors for the projection types have one constructor that takes a void pointer and a winrt::take_ownership_from_abi_t tag type. This constructs the projection type using the ABI type as a parameter, and the tag tells it to not increment the reference count.
winrt::Windows::Foundation::IUnknown unknown{store, winrt::take_ownership_from_abi};
store = nullptr;
The only reference to this that I know of is in Interop between C++/WinRT and the ABI. The direct call to Release that Viorel mentioned is still simpler to write.