82#define _inhibit_name(name) _inhibit_##name
89#define inhibitDeclare(name) enum { _inhibit_name(name) = 0 }
101#if !defined(_MSC_VER) || _MSC_VER > 1930
102#define inhibitCheck(name) switch(tokstring(_inhibit_name(name))[_inhibit_name(name)]) default:
104#define inhibitCheck(name)
107#define _inhibitDisallow(name) _blkCond(const int * const _inhibit_name(name) = 0, !_inhibit_name(name))
125#define inhibitDisallow(name) _blkStart _inhibitDisallow(name)
127#define _inhibitAllow(name) _blkCond(const int _inhibit_name(name) = 0, !_inhibit_name(name))
137#define inhibitAllow(name) _blkStart _inhibitAllow(name)
144#if DEBUG_LEVEL >= 1 && !defined(_PREFAST_)
146#define _inhibitReturn _inhibitDisallow(RETURN)
147#define _allowReturn _inhibitAllow(RETURN)
148#define return inhibitCheck(RETURN) return
150#define _inhibitReturn _blkStart
151#define _allowReturn _blkStart
156#define _BLK_VAR _block_done
160#define _blkDef(before) for (tokeval(before); _BLK_VAR; _BLK_VAR = 0)
161#define _blkCond(before, cond) for (tokeval(before); (cond) && _BLK_VAR; _BLK_VAR = 0)
162#define _blkFull(before, cond, ...) for (tokeval(before); (cond) && _BLK_VAR; (__VA_ARGS__), _BLK_VAR = 0)
166#define _blkStart _blkDef(bool _BLK_VAR = 1)
167#define _blkBefore(...) for (tokeval(__VA_ARGS__); _BLK_VAR; _BLK_VAR = 0)
168#define _blkBeforeAfter(before, ...) _inhibitReturn _blkFull(tokeval(before), true, __VA_ARGS__)
169#define _blkAfter(...) _blkBeforeAfter(, (__VA_ARGS__))
172#define _blkEnd _blkBefore()
176#define _blkDefRecursive(type, name, ...) \
177 _blkDef(type tokcat2(_block_decl_, name) = tokeval(__VA_ARGS__)) \
178 _blkCond(type name = tokcat2(_block_decl_, name), ((void)name, true))
225#define blkWrap(before, ...) _blkStart _blkBeforeAfter(tokeval(before), __VA_ARGS__) _blkEnd
Compiler and platform detection macros.
Runtime type system and type descriptor infrastructure.
Token pasting and stringification macros.