<div dir="ltr"><div>Hi,<br><br>I think that SIP makes a partial attempt to support so-called "scoped enums" in gencode.c in that enums are emitted with a static_cast<int> like this:<br><br>static sipEnumMemberDef enummembers_KWindowSystem[] = {<br>    {sipName_ClassHint, static_cast<int>( ::KWindowSystem::ClassHint), 15},<br>    {sipName_NETWM, static_cast<int>( ::KWindowSystem::NETWM), 15},<br>    {sipName_Unknown, static_cast<int>( ::KWindowSystem::Unknown), 16},<br>    {sipName_WMHints, static_cast<int>( ::KWindowSystem::WMHints), 15},<br>    {sipName_Wayland, static_cast<int>( ::KWindowSystem::Wayland), 16},<br>    {sipName_X11, static_cast<int>( ::KWindowSystem::X11), 16},<br>    {sipName_XApp, static_cast<int>( ::KWindowSystem::XApp), 15},<br>};<br><br>However, there are a couple of parts missing. One missing part is that the emitted code has two calls to "sipConvertFromEnum()", and I think that each call needs a similar static_cast<int> applied to the first argument.<br><br>I'm not so sure about the fix for the second missing part. Looking at the above set of enums. It turns out that ::KWindowSystem::{Unknown,Wayland,X11} actually should be emitted as ::KWindowSystem::Platform::{Unknown,Wayland,X11} as that is a scoped enum in the C++ code:<br><br>    enum <b>class</b> Platform {<br>        Unknown,<br>        X11,<br>        Wayland<br>    };<br><br>The relevant logic is near line sipgen.c:3270 (in 4.19.4.dev1708081632) and the correct prefix is available in the data:<br><br>(gdb) p *emd->ed.cname<br>$49 = {nameflags = 1, text = 0x5555582be010 "KWindowSystem::Platform", len = 23, offset = 634, next = 0x5555582bc880}<br><br>However, the code presently ends up calling 'prcode(fp, "%S::", classFQCName(ecd))' for the result as above. I am unclear as to the correct change to the logic around here though.<br><br>It would be great to get these two fixed (I have a trivial patch for the first part if needed).<br><br></div>Thanks, Shaheed<br></div>