Quantcast
Channel: Intel® C++ Compiler
Viewing all articles
Browse latest Browse all 1616

[Intel C++ 14.0] Macro enum class

$
0
0

Hellow my friends!

In MSVC2013 perfectly works for me this macro (which allow use enum class as flag enum and disallow convert to int):

#pragma once

#define EnumClass(Enum, Type) \
enum class Enum : Type; \
inline Enum  operator &  (Enum x, Enum y)  {return static_cast<Enum> (static_cast<Type>(x) & static_cast<Type>(y));}; \
inline Enum  operator |  (Enum x, Enum y)  {return static_cast<Enum> (static_cast<Type>(x) | static_cast<Type>(y));}; \
inline Enum  operator ^  (Enum x, Enum y)  {return static_cast<Enum> (static_cast<Type>(x) ^ static_cast<Type>(y));}; \
inline Enum  operator ~  (Enum x)          {return static_cast<Enum> (~static_cast<Type>(x));};                       \
inline Enum& operator &= (Enum& x, Enum y) {x = x & y; return x;};                                                    \
inline Enum& operator |= (Enum& x, Enum y) {x = x | y; return x;};                                                    \
inline Enum& operator ^= (Enum& x, Enum y) {x = x ^ y; return x;};                                                    \
enum class Enum : Type

But in Intel C++ 14.0 fails on:

 

                EnumClass(ToolhelpSnapshotFlag, unsigned __int32)
                {
                    List     = 0x00000001,
                    Process  = 0x00000002,
                    Thread   = 0x00000004,
                    Module   = 0x00000008,
                    Module32 = 0x00000010,
                    All      = List | Process | Thread | Module, //error : expression must have a constant value
                    Inherit  = 0x80000000
                };

How to enable works this on Intel C++ 14.0 without converting result of all operators to underlying type?

 


Viewing all articles
Browse latest Browse all 1616

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>