"bcc32c Error : reference to 'byte' is ambiguous"

From Support
Jump to: navigation, search

This error is often seen relating to a Gdiplus header, when headers that contain using namespace std; are include before the Gdiplus header.

The reason for the error is as follows:
1) windows.h defines byte
2) stddef.h defines std::byte
This is key: If after this point the compiler sees using namespace;, byte become ambiguous because it refers to both ::byte (from "windows.h") and std::byte (from "stddef.h"). 3) Now when gdiplus.h is seen, since it does not qualify byte, the reference is ambiguous. And you will see this error:

 bcc32c Error GdiplusPath.h(146): reference to 'byte' is ambiguous
  rpcndr.h(197): candidate found by name lookup is 'byte'
  stddef.h(258): candidate found by name lookup is 'std::byte'


It is generally not recommended to have using namespace; in headers.
If the code requires this, then you must make sure that the gdiplus headers are included before the headers that contains using namespace;.
OR
If that is not possible do something like this:

#include <windows.h>
#include <stddef.h>
using namespace std;
#define byte ::byte     //<<<<<remove these lines to see the error
#include <Gdiplus.h>
#undef byte             //<<<<<remove these lines to see the error
#include <stdio.h>
int main()
{
  std::byte test{ 2 };
  printf("%X \n",test);
  return 0;
 }