[c++17][byte] visual studio c++17 with windows.h byte error C2872

visual studio 상에서 c++17 옵션을 활성화 시 만날 수 있는 오류

  • 영문

1>c:\program files (x86)\windows kits\10\include\10.0.14393.0\shared\rpcndr.h(192): error C2872: ‘byte’: ambiguous symbol
1>c:\program files (x86)\windows kits\10\include\10.0.14393.0\shared\rpcndr.h(191): note: could be ‘unsigned char byte’
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\include\cstddef(15): note: or ‘std::byte’

  • 한글

1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um\oaidl.h(563,26): error C2872: ‘byte’: 모호한 기호입니다.
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared\rpcndr.h(191,23): message : ‘unsigned char byte’일 수 있습니다.
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include\cstddef(29,12): message : 또는 ‘std::byte’

c++17 에서 추가된 std::byte 의 windows.h 의 byte 와의 정의중복 으로 인한 빌드 오류

https://en.cppreference.com/w/cpp/types/byte

windows.h
typedef unsigned char byte;

해당 오류를 피하는 방법을 대부분의 해결책으로 기존windows 에서 정의한 byte 가 먼져 여서 그런지 std::byte 를 비활성 하는 옵션을 사용하고 있다

프로젝트 속성>c/c++>전처리기 페이지의 정의 부분에 _HAS_STD_BYTE=0 와 같이 추가 하거나

windows.h 와 각 std include 시점에 맞추어 #define _HAS_STD_BYTE 0 을 넣어주게되면 std::byte 가 비활성되며 정상 빌드 된다

서칭할 때 에는 좀더 미려한 방법이 있을거라 생각했으나 아직 표준에서 해결은 못한것으로 보인다


댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다