-struct CYTypeModifier :
-    CYNext<CYTypeModifier>
-{
-    CYTypeModifier(CYTypeModifier *next) :
-        CYNext<CYTypeModifier>(next)
-    {
-    }
-
-    virtual CYExpression *Replace(CYContext &context) = 0;
-};
-
-struct CYTypeArrayOf :
-    CYTypeModifier
-{
-    size_t size_;
-
-    CYTypeArrayOf(size_t size, CYTypeModifier *next = NULL) :
-        CYTypeModifier(next),
-        size_(size)
-    {
-    }
-
-    CYPrecedence(2)
-
-    virtual CYExpression *Replace(CYContext &context);
-};
-
-struct CYTypeConstant :
-    CYTypeModifier
-{
-    CYTypeConstant(CYTypeModifier *next = NULL) :
-        CYTypeModifier(next)
-    {
-    }
-
-    CYPrecedence(3)
-
-    virtual CYExpression *Replace(CYContext &context);
-};
-
-struct CYTypePointerTo :
-    CYTypeModifier
-{
-    CYTypePointerTo(CYTypeModifier *next = NULL) :
-        CYTypeModifier(next)
-    {
-    }
-
-    CYPrecedence(3)
-
-    virtual CYExpression *Replace(CYContext &context);
-};
-
-struct CYTypeVariable :
-    CYTypeModifier