On Thursday, 10 March 2016 at 14:52:16 UTC, KlausO wrote:
For GUIDs you often have to take the address (e.g. for calls to
QueryInterface), so I think phobos does not correctly implement
this.
Yes, that was my meaning.
Is the above pair (const GUID and static member) the right way
to declare this idiom or would the following be better ?
Both compile and seem to be equivalent (in terms of achieving
the same goal):
enum IID IID_IServiceProvider = { 0x6d5140c1, 0x7436, 0x11ce, [
0x80, 0x34, 0x00, 0xaa, 0x00, 0x60, 0x09, 0xfa ] };
interface IServiceProvider : IUnknown
{
static immutable GUID iid = IID_IServiceProvider;
public:
/* [local] */ HRESULT QueryService(
/* [in] */ in GUID* guidService,
/* [in] */ in IID* riid,
/* [out] */ void **ppvObject);
}
Personally I would just declare one immutable value in module
scope and be done with it. It really just doesn't matter. Unless
you're following some sort of style guide, personal preference
rules the day. I don't know if Rainers has a special reason for
what he did with the Visual D code or if it was personal
preference.
As for Phobos, the Win32 API in Phobos as it stands now was a
recent addition. Though it existed as a third-party package for
several years, it may still have some kinks to work out and may
not follow the Phobos style guide in some places.