|  | // 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{}; | 
|  |  |