There are many IEnumXXXX type COM interfaces that have a pure virtual method Next, like this:
IEnumString : IUnknown {
...
virtual HRESULT Next(ULONG, LPOLESTR*, ULONG*) = 0;
...
};
IEnumGUID : IUnknown {
...
virtual HRESULT Next(ULONG, GUID*, ULONG*) = 0;
...
};
Need a template, like this:
enum_value_type<IEnumString>::type // LPOLESTR
enum_value_type<IEnumGUID>::type // GUID