NodeCreator
template<typename NodeType> struct NodeCreator;
if (!NodeCreator<ClonedNode>(this)(clone, _node, _node))
&& NodeCreator<ObjectNode>(this)(name, _node);
return NodeCreator<ObjectNode>(this)(name, _node);
if (!NodeCreator<FunctionNode>(this)(name, false, false, functionNode))
&& NodeCreator<SpecialNameNode>(this)("guard variable for ",
&& NodeCreator<SpecialNameNode>(this)(prefix, type, _node);
&& NodeCreator<SpecialNameNode>(this)(
&& NodeCreator<SpecialNameNode>(this)(
if (!NodeCreator<SimpleNameNode>(this)("std", prefix))
|| !NodeCreator<PrefixedNode>(this)(prefix, node, _node)) {
return NodeCreator<CVQualifiersNode>(this)(qualifiers, _node,
if (!NodeCreator<PrefixedNode>(this)(prefixNode, node, node))
if (!NodeCreator<SimpleNameNode>(this)("string literal",
return NodeCreator<PrefixedNode>(this)(functionName, entityName, _node);
if (!NodeCreator<XtructorNode>(this)(true, fInput[1] - '1',
if (!NodeCreator<XtructorNode>(this)(false, fInput[1] - '0',
return NodeCreator<OperatorNode>(this)(info, _node);
return NodeCreator<CastOperatorNode>(this)(typeNode, _node);
&& NodeCreator<VendorOperatorNode>(this)(name, _node);
return NodeCreator<CVQualifiersNode>(this)(qualifiers, _node,
&& NodeCreator<VendorTypeModifierNode>(this)(name, type,
&& NodeCreator<NamedTypeNode>(this)(nameNode, _node);
return NodeCreator<TypeModifierNode>(this)(modifier, node, _node);
&& NodeCreator<NamedTypeNode>(this)(nameNode, _node);
if (!NodeCreator<FunctionNode>(this)((Node*)NULL, true, isExternC,
? NodeCreator<ArrayNode>(this)(type, dimensionExpression, _node)
: NodeCreator<ArrayNode>(this)(type, dimensionNumber, _node);
&& NodeCreator<PointerToMemberNode>(this)(classType, memberType,
return NodeCreator<SubstitutionNode>(this)(parameter, _node);
if (!NodeCreator<TemplateNode>(this)(node, templateNode))
if (!NodeCreator<CallNode>(this)(callNode))
if (!NodeCreator<ConversionExpressionNode>(this)(type, expression))
|| !NodeCreator<DependentNameNode>(this)(type, name, _node)) {
if (!NodeCreator<OperatorExpressionNode>(this)(info, operatorNode))
if (!NodeCreator<TypedNumberLiteralNode>(this)(type,
return NodeCreator<SimpleNameNode>(this)(name, length, _node);
return NodeCreator<SimpleTypeNode>(this)(type, _node);
if (!NodeCreator<SimpleTypeNode>(this)(name, _node))
if (!NodeCreator<SimpleTypeNode>(this)(prefix, prefixNode)
|| !NodeCreator<PrefixedNode>(this)(prefixNode, _node, _node)) {
if (!NodeCreator<TemplateNode>(this)(_node, templateNode)
|| !NodeCreator<SimpleTypeNode>(this)(templateArgs, argsNode)) {
return NodeCreator<SubstitutionNode>(this)(node, _node);