nanosvg icon indicating copy to clipboard operation
nanosvg copied to clipboard

VS2012 compatibility

Open SergeySlice opened this issue 6 years ago • 2 comments

This definition

typedef struct NSVGpaint {
	char type;
	union {
		unsigned int color;
		NSVGgradient* gradient;
	};
} NSVGpaint;

causes warning C4201 nameless union can be corrected by

typedef struct NSVGpaint {
	char type;
	union {
		unsigned int color;
		NSVGgradient* gradient;
	} paint;
} NSVGpaint;

SergeySlice avatar Dec 20 '18 13:12 SergeySlice

@SergeySlice Anonymous ("nameless") unions have a particular reason so you don't need to add the name of the union to access a particular member, for instance:

#include "nanosvg.h"
typedef struct NSVGpaint_new {          // your new struct
	char type;
	union {
		unsigned int color;
		NSVGgradient* gradient;
	} paint;
} NSVGpaint_new;

int test1(NSVGpaint *p) {               // using the original struct
  return p->color;                      // <-- simple access
}

int test2(NSVGpaint_new *p) {           // using your new struct
  return p->paint.color;                // <-- see added 'paint.'
}

[Note: code above tested in a simple C source file under Linux only.]

cppreference.com says "Members of an anonymous union are injected in the enclosing scope".

Note: this is C++, I'm not aware of differences to the C standard here (maybe it's not allowed in C?).

I'm not one of the authors of NanoSVG but I believe that this change would neither be useful nor acceptable. Even if the original author(s) would be willing to change the NanoSVG sources (which would likely be a lot of work) it would have an impact on all users using the defined structs in their own code (source compatibility would be affected).

That said, I don't see this warning in my (C++) compilation with VS 2019, even if I switch to warning level 4 (/W4) and disable MS extensions (/Za). Note that VS 2019 doesn't let me select C++ standard older than C++14. Is there anything else you'd need to do (set other compiler properties) to see this warning?

I propose to close this issue ("won't fix").

Albrecht-S avatar Jul 12 '22 17:07 Albrecht-S

@SergeySlice, does this problem continue with Visual Studio 2022? If it does, please replace the date within the title to demonstrate this.

RokeJulianLockhart avatar Jul 15 '22 16:07 RokeJulianLockhart