#define TERN_(O,A) _TERN(_ENA_1(O),,A) // OPTION ? 'A' : '<nul>'
#define _TERN(E,V...) __TERN(_CAT(T_,E),V) // Prepend 'T_' to get 'T_0' or 'T_1'
#define __TERN(T,V...) ___TERN(_CAT(_NO,T),V) //
#define ___TERN(P,V...) THIRD(P,V) // If first argument has a comma, A. Else B.
#define THIRD(a,b,c,...) c
#define _ENA_1(O) _ISENA(CAT(_IS,CAT(ENA_, O)))
#define _ISENA(V...) IS_PROBE(V)
#define IS_PROBE(V...) SECOND(V, 0) // Get the second item passed, or 0
#define SECOND(a,b,...) b
#define CAT(a,V...) _CAT(a,V)
#define _CAT(a,V...) a##V
那么TERN_(HAS_FAST_MOVES, parser.codenum == 0)
=_TERN(_ENA_1(HAS_FAST_MOVES),,parser.codenum == 0)
= __TERN(_CAT(T_,_ENA_1(HAS_FAST_MOVES),)
= ___TERN(_CAT(_NO,_CAT(T_,_ENA_1(HAS_FAST_MOVES)),)
=THIRD(_CAT(_NO,_CAT(T_,_ENA_1(HAS_FAST_MOVES)),)
=THIRD(_CAT(_NO,_CAT(T_, _ISENA(CAT(_IS,CAT(ENA_,HAS_FAST_MOVES))))))
=THIRD(_CAT(_NO,_CAT(T_, _ISENA(CAT(_IS,ENA_HAS_FAST_MOVES)))))
=THIRD(_CAT(_NO,_CAT(T_, _ISENA(_ISENA_HAS_FAST_MOVES))))
=THIRD(_CAT(_NO,_CAT(T_,IS_PROBE(_ISENA_HAS_FAST_MOVES))))
=THIRD(_CAT(_NO,_CAT(T_,SECOND(_ISENA_HAS_FAST_MOVES))))
=THIRD(_CAT(_NO,_CAT(T_,0)))
=THIRD(_CAT(_NO,T_0))
=THIRD(_NOT_0)
=THIRD(~,1)
=0;