diff options
Diffstat (limited to 'test/SemaCXX/ms-iunknown-template-function.cpp')
-rw-r--r-- | test/SemaCXX/ms-iunknown-template-function.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/test/SemaCXX/ms-iunknown-template-function.cpp b/test/SemaCXX/ms-iunknown-template-function.cpp new file mode 100644 index 000000000000..8f741a18eaac --- /dev/null +++ b/test/SemaCXX/ms-iunknown-template-function.cpp @@ -0,0 +1,39 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -fms-extensions %s +// expected-no-diagnostics +typedef long HRESULT; +typedef unsigned long ULONG; +typedef struct _GUID { + unsigned long Data1; + unsigned short Data2; + unsigned short Data3; + unsigned char Data4[8]; +} GUID; +typedef GUID IID; + +// remove stdcall, since the warnings have nothing to do with +// what is being tested. +#define __stdcall + +extern "C" { +extern "C++" { +struct __declspec(uuid("00000000-0000-0000-C000-000000000046")) + IUnknown { +public: + virtual HRESULT __stdcall QueryInterface( + const IID &riid, + void **ppvObject) = 0; + + virtual ULONG __stdcall AddRef(void) = 0; + + virtual ULONG __stdcall Release(void) = 0; + + template <class Q> + HRESULT __stdcall QueryInterface(Q **pp) { + return QueryInterface(__uuidof(Q), (void **)pp); + } +}; +} +} + +__interface ISfFileIOPropertyPage : public IUnknown{}; + |