2013/10/4 Thiago Macieira <thiago.macie...@intel.com>: > On quinta-feira, 3 de outubro de 2013 23:03:44, Wander Lairson Costa wrote: >> If we combine two enum values, the result is not a valid enum value >> anymore, so it cannot be attributed to an enum variable. >> >> C++ compilers will complain if such an assigment is done. > > This is done all the time in C++. The enum must be backed by an integer with > at least as many bits as the enum possesses. >
The issued raised when I took code from window.c in the weston clients: mask = xkb_state_serialize_mods(input->xkb.state, XKB_STATE_DEPRESSED | XKB_STATE_LATCHED); g++ gave me a build error because I was passing an integer to enum parameter. C++ is a bit more nit-picky than C regarding implicit conversions. Therefore I had to use a cast. > With the ABI that GCC uses, it's always at least 4 bytes. Personally, I don't like enum's in the ABI at all, because according to C/C++ standards, the compiler is free to choose whatever type it likes, and indeed I had problems with that in the past. C++11 fixed that [1]. But nevermind. > The only thing is that you need to cast it from integer back to the enum type. > That's what the patch is about: avoid casts. Whenever you use a cast, you are giving up the help the compiler may give to you regarding invalid type conversions. So, I always use the rule of thumb of avoiding casts whenever I can. IMO, this is not a harmful patch and will make the C++ programmers a little bit easier. Ofcourse the libxkbcommon maintainers may have another view and reject the patch. [1] http://www.cprogramming.com/c++11/c++11-nullptr-strongly-typed-enum-class.html -- Best Regards, Wander Lairson Costa _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel