문법에 맞지 않는 learn.microsoft.com의 C++ 소스 코드
C#에서 Win32 API 연동을 위해 Interop 구조체를 docs 문서에서 참고했는데,
IORING_HANDLE_REF structure (ioringapi.h)
; https://learn.microsoft.com/en-us/windows/win32/api/ioringapi/ns-ioringapi-ioring_handle_ref
다음과 같은 형식으로 코드가 실려 있습니다.
typedef struct IORING_HANDLE_REF {
void IORING_HANDLE_REF(
HANDLE h
);
void IORING_HANDLE_REF(
UINT32 index
);
IORING_REF_KIND Kind;
union {
HANDLE Handle;
UINT32 Index;
} HandleUnion;
HandleUnion Handle;
} IORING_HANDLE_REF;
저런 구문이 최근 C/C++ 표준에 가능해졌나... 하고 잠시 헤맨 끝에 결국 그냥 Windows SDK에 포함된 헤더 파일을 보고 저것이 docs 웹 사이트에 올려지는 과정에서 잘못 전처리된 코드라는 것을 알게 되었습니다. 즉, 원래는 이런 코드였던 것입니다.
typedef struct IORING_HANDLE_REF
{
explicit IORING_HANDLE_REF(HANDLE h)
: Kind(IORING_REF_KIND::IORING_REF_RAW)
, Handle(h)
{}
explicit IORING_HANDLE_REF(UINT32 index)
: Kind(IORING_REF_KIND::IORING_REF_REGISTERED)
, Handle(index)
{}
IORING_REF_KIND Kind;
union HandleUnion
{
HandleUnion(HANDLE h)
: Handle(h)
{}
HandleUnion(UINT32 index)
: Index(index)
{}
// Handle to the file object if Kind == IORING_REF_RAW
HANDLE Handle;
// Index of registered file handle if Kind == IORING_REF_REGISTERED
UINT32 Index;
} Handle;
} IORING_HANDLE_REF;
그러니, docs 문서를 너무 믿지 마세요. ^^