Originally, the code uses a metafunction second to delay the time when rule_set<T> executes, because this metafunction needs an undetermined argument Src. However, if the compiler is smart enough (IDK whether this case exists), it can find that Src is actually not used and evaluate it immediately.
What I have done is to put the type to a template parameter, so that the value of rule_set<T> must be delayed until cppcmb_parse_rule being invoked. It also simplifies the code. It is still IFNDR though.
Apart from that, I doubt the use of cppcmb_parse_rule inside rule_t::apply is also IFNDR.
Originally, the code uses a metafunction
second
to delay the time whenrule_set<T>
executes, because this metafunction needs an undetermined argumentSrc
. However, if the compiler is smart enough (IDK whether this case exists), it can find thatSrc
is actually not used and evaluate it immediately.What I have done is to put the type to a template parameter, so that the value of
rule_set<T>
must be delayed untilcppcmb_parse_rule
being invoked. It also simplifies the code. It is still IFNDR though.Apart from that, I doubt the use of
cppcmb_parse_rule
insiderule_t::apply
is also IFNDR.