FOG Bugs

Blatant bugs

Missing syntactic action code


exception-specifications, function try-blocks, ...


templated template parameters

type1 (K&R) function declarations

Missing semantic action code

Normalisation of function parameter names prior to composition.

Resolution of l-value meta-expressions

asm-definition (as declaration)



Missing functionality

Synthesis of code to construct array members


Meta-function composition

Treatment of functions as structured token lists

Microsoft extensions: __cdecl etc

$Dynamic/$Static within a meta-variable

Implementation of a function-body as structured lists


Missing built-in meta-functions


numerous meta-type specific methods. The foot of FogMetaType_Methods.xx shows what is installed.

Subtle bugs

Missing syntactic action code

Declarations of the form: left ::class * right = value; in a context I cannot produce a test case for.

Most uses of the template keyword prefix to clarify the nature of a subsequent name.

Parenthesised meta-expression

Many uses of decl-specifiers in syntax trees used as meta-function-arguments/bodies, meta-variable initialisers

Missing semantic action code

Repair of cast unary expressions misparsed as binary expressions..

Repair of template/arithmetic expressions misparsed as arithmetic/template expressions.

Template function arguments are only deduced for simple cases.

Dubious functionality

Distinct treatment of namespaces and classes

Resolution of is_boundary() and is_pure() predicates

Use of const as an auto qualifier

Treatment of friends.

Default template arguments.

Marginally functional built-in meta-functions

std::parse, std::parse_tokens

Detailed bugs

-unnested gives bad code for nested classes

Need a fix for "friend ios" typo in Sun's stdio.h

"using" isn't as flexible as it should be

Function bodies derived by meta-programming may have redundant semi-colons or blank lines - seems benign.

Suggestions and Future Work

meta keyword

inline as auto within functions

revamped meta-phases, meta-constructors/meta-destructors

meta-interception of stages of expression construction


V 2.0.2 Fixes

meta-break and meta-continue and meta-switch implemented

Activation of meta-statements within function bodies

10 scope::is_xxx predicates added

:: prefix to a ptr-operator in a declaration

Derived meta-functions now co-exist with their occluded base-class counterparts.

Derived meta-constructors and meta-constructors no longer interfere with execution of inherited counterparts.

The construction of base classes is no longer derived before base.

EOF encountered during parser resynchronisation gets a better diagnostic.

Text encountered while disabled by a #if need no longer be tokenisable.

V 2.0.3 Fixes

meta-statements from meta-functions are no longer treated as statements.

Derived constructors/destructors named using @Scope now use the derived class name.

asm-definition (as statement)

(exception-)handlers, try-blocks

Concatenation now generates an extension of the first element.

Resolution of $-expressions now occurs at predictable times.

multi-line diagnostic context eliminated

diagnostic context added for object-statements

function-body now constitutes a level for the purposes of multi-$ expressions

ctor-inits may use tree-expressions

ctor-inits and initialiser-clauses as object-statements

Multi-$ expressions work from function bodies within object-statement-scopes

meta-functions can now be declared to return an exposed list