<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
        <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
        <TITLE></TITLE>
        <META NAME="GENERATOR" CONTENT="OpenOffice.org 2.4  (Linux)">
        <META NAME="AUTHOR" CONTENT="Marcin Kuszczak">
        <META NAME="CREATED" CONTENT="20081009;14222900">
        <META NAME="CHANGED" CONTENT="20081011;22130700">
        <STYLE TYPE="text/css">
        <!--
                @page { size: 29.7cm 21cm; margin: 1.5cm }
                P { margin-bottom: 0.21cm }
                TH P { font-weight: bold; text-align: center }
                A:link { color: #000080; text-decoration: underline }
        -->
        </STYLE>
</HEAD>
<BODY LANG="pl-PL" LINK="#000080" VLINK="#800000" DIR="LTR">
<P LANG="en-US" ALIGN=CENTER STYLE="margin-bottom: 0cm"><FONT SIZE=4 STYLE="font-size: 16pt"><B>Uniform
syntax for compile-time expressions in D</B></FONT></P>
<P LANG="en-US" ALIGN=CENTER STYLE="margin-bottom: 0cm"> 
</P>
<UL>
        <LI><P LANG="en-US" STYLE="margin-bottom: 0cm">Most examples are
        real templates taken from Doost library:
        www.dsource.org/projects/doost/</P>
        <LI><P STYLE="margin-bottom: 0cm"><SPAN LANG="en-US">This is
        slightly modified version of my change
        proposal:<BR></SPAN><A HREF="http://d.puremagic.com/issues/show_bug.cgi?id=1827"><SPAN LANG="en-US">http://d.puremagic.com/issues/show_bug.cgi?id=1827</SPAN></A></P>
</UL>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><FONT SIZE=4><B>Proposed
syntax:</B></FONT></P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<P LANG="zxx" STYLE="margin-bottom: 0cm">ctexpr (bool) :                (T [S1 S2
... Sn] [ ':' | '=='  inexpr] ) |  ct_bool_value</P>
<P LANG="zxx" STYLE="margin-bottom: 0cm">inexpr        (bool) :        pattern |
pattern if (ctexpr) | if(ctexpr)</P>
<P LANG="zxx" STYLE="margin-bottom: 0cm">pattern:                type | derived
data type</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><FONT SIZE=4><B>Description:</B></FONT></P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><B>T</B>                        type identifier</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><B>S1..Sn</B>                        introduced
types</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><B>ct_bool_value</B>                compile
time true or false</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><B>:</B>                           direct or
indirect type of ... (in case of value types: is implicitly
convertible)</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><B>==</B>                        is exact type
of ...</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><B>derived data type        </B>e.g.
S[] S[N = size_t] , E[K], E[int], class, typedef, int, MyType!(int),
TheirType</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm">Passing by alias, default
type, default type and value examples are not taken into
consideration in above syntax description. Examples for these case
are in table below.</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm; border-top: none; border-bottom: 1px solid #000000; border-left: none; border-right: none; padding-top: 0cm; padding-bottom: 0.07cm; padding-left: 0cm; padding-right: 0cm">
<BR>
</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<OL>
        <LI><P LANG="en-US" STYLE="margin-bottom: 0cm"><B>ctexpr</B> and
        <B>pattern </B>evaluates to true or false</P>
</OL>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<OL START=2>
        <LI><P LANG="en-US" STYLE="margin-bottom: 0cm">Both <B>pattern</B>
        and <B>ctexpr</B> must be true, to match template function during
        instantiation</P>
</OL>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<OL START=3>
        <LI><P LANG="en-US" STYLE="margin-bottom: 0cm">Introduced symbols in
        pattern are aliased with concrete types when evaluating <B>ctexpr</B></P>
</OL>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<OL START=4>
        <LI><P LANG="en-US" STYLE="margin-bottom: 0cm">Symbols can have
        fixed types. If reasonable when evaluating pattern symbols can have
        also value e.g.:<BR><BR>void changeElement(T U N : U[N=uint]
        if(N&gt;100))(T array, U value, int index); <BR><BR>Above template
        function matches all static arrays bigger than 100;  N - number of
        declared elements in s. array; N is binded to value of type uint.</P>
</OL>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<OL START=5>
        <LI><P LANG="en-US" STYLE="margin-bottom: 0cm">Parts of <B>ctexpr</B>
        can be omitted, so it looks exactly like current declarations
        e.g.:<BR><BR><SPAN LANG="zxx">string stringize(T : bool)(bool
        value);                 // omitted symbols and ctexpr<BR>string stringize(T)(T
        value);                                // omitted symbols, &quot;:&quot; and </SPAN><SPAN LANG="zxx"><B>inexpr</B></SPAN></P>
</OL>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<OL START=6>
        <LI><P LANG="en-US" STYLE="margin-bottom: 0cm">Initial T can not be
        redefined; currently it is rather confusing that elephant transforms
        into monkey in following:<BR>string stringize(T : T[])(T value);
                                //what should be passed to function? array or array element?<BR><BR>it
        should be rather:<BR>string stringize(T U : U[])(T value);                         //now
        everything is clear</P>
</OL>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<OL START=7>
        <LI><P LANG="en-US" STYLE="margin-bottom: 0cm">Following definition
        with three template arguments:<BR><BR>void parse(T E : E[], U :
        bool, V E N : E[N] if(N&gt;100))(T array, U flag, V sarray);<BR><BR>should
        be just syntactic sugar for:<BR><BR>void parse(T E : E[] &amp;&amp;
        U : bool &amp;&amp; V E N : E[N] if (N&gt;100))(T array, U flag, V
        sarray) ;<BR><BR><B>Above is very complicated case which would be
        possible, but currently it is not. Simple cases still stay simple as
        it is now.</B></P>
</OL>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<OL START=8>
        <LI><P LANG="en-US" STYLE="margin-bottom: 0cm">... is() for
        metaprogramming can be dropped.</P>
</OL>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<OL START=9>
        <LI><P LANG="en-US" STYLE="margin-bottom: 0cm">It is an error if
        defined symbols are not used in inexpr or don't have assigned types
        in ctexpr</P>
</OL>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<OL START=10>
        <LI><P LANG="en-US" STYLE="margin-bottom: 0cm">If <B>inexpr</B> is
        not defined T is aliased to all given symbols<BR><BR>
        </P>
        <LI><P LANG="en-US" STYLE="margin-bottom: 0cm">Template function
        resolution (my guess that it would be possible). When resolving
        template function name it might be possible to relay on ctexpr
        resulting value. If compile-time time expression returns true, then
        there is a match. In such a case it would be possible to create
        templ. functions:<BR><SPAN LANG="zxx"><B>S
        toupper(isSomeString!(S))(S input)</B></SPAN><BR>Although there
        should be probably more calculations to know which function is more
        specialized.</P>
</OL>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><FONT SIZE=4><B>With above
proposal there can be only one syntax for: static if(), template
(function) definition &amp; static assert() &amp; alias while is()
for metaprogramming can be safely dropped. This syntax is consistent
&amp; extensible so it will allow to achieve much more.</B></FONT></P>
<P LANG="en-US" STYLE="margin-bottom: 0cm; border-top: none; border-bottom: 1px solid #000000; border-left: none; border-right: none; padding-top: 0cm; padding-bottom: 0.07cm; padding-left: 0cm; padding-right: 0cm">
<BR>
</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm; page-break-before: always">
<BR>
</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><FONT SIZE=4><B>Uniform
syntax by example</B>:</FONT></P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><B>Template (function)
compile-time arguments:</B></P>
<TABLE WIDTH=100% BORDER=1 BORDERCOLOR="#000000" CELLPADDING=4 CELLSPACING=0 STYLE="page-break-after: auto">
        <COL WIDTH=85*>
        <COL WIDTH=85*>
        <COL WIDTH=85*>
        <THEAD>
                <TR VALIGN=TOP>
                        <TH WIDTH=33% BGCOLOR="#ffff66">
                                <P LANG="zxx"><FONT SIZE=3>Old</FONT></P>
                        </TH>
                        <TH WIDTH=33% BGCOLOR="#ffff66">
                                <P LANG="zxx"><FONT SIZE=3>New</FONT></P>
                        </TH>
                        <TH WIDTH=33% BGCOLOR="#ffff66">
                                <P LANG="en-US"><FONT SIZE=3>Comment</FONT></P>
                        </TH>
                </TR>
        </THEAD>
        <TBODY>
                <TR>
                        <TD COLSPAN=3 WIDTH=100% VALIGN=TOP BGCOLOR="#ffff99">
                                <P LANG="zxx" ALIGN=CENTER><FONT SIZE=3><B>Template function
                                compile-time arguments:</B></FONT></P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">template
                                normalizedType(T)</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">template
                                normalizedType(T);</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><BR>
                                </P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">template
                                normalizedType(T : U[N], U, size_t N)</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">template
                                normalizedType(T U N : U[N=size_t])</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">Introduced
                                variables are before their usage</FONT></P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">void
                                doIt(alias T E : E[])(E elem)</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">void
                                doIt(alias T E : E[])(E elem)</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">Alias
                                parameters; I am <SPAN LANG="zxx">not sure if condition checks
                                would work for aliases.</SPAN></FONT></P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">void
                                doIt(T=string E : E[])(E elem)</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">void
                                doIt(string T E : E[])(E elem)</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">I am not sure
                                if checking condition works right now.</FONT></P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">size_t
                                levenshteinDistance(string equals = &quot;a == b&quot;, Range1,
                                Range2)(Range1 s, Range2 t)</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">size_t
                                levenshteinDistance(string equals = &quot;a == b&quot;, Range1,
                                Range2)(Range1 s, Range2 t)</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">Default
                                template parameter value will stay same as before. Please notice
                                better consistency with situation when only type is default (row
                                above) than in current version. And more possibilities to specify
                                conditions.</FONT></P>
                        </TD>
                </TR>
                <TR>
                        <TD COLSPAN=3 WIDTH=100% VALIGN=TOP BGCOLOR="#ffff99">
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt"><B>Things
                                currently not possible:</B></FONT></P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><BR>
                                </P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">void do(T :
                                class)(T instance);</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><BR>
                                </P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><BR>
                                </P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">void do(T E :
                                E[class])(T sarray, E element);</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">match
                                associative arrays with key as class</FONT></P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><BR>
                                </P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">S
                                toupper(isSomeString!(S))(S input)</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">See point 11</FONT></P>
                        </TD>
                </TR>
                <TR>
                        <TD COLSPAN=3 WIDTH=100% VALIGN=TOP BGCOLOR="#ffff99">
                                <P LANG="zxx" ALIGN=CENTER><FONT SIZE=3><B>static if </B></FONT>
                                </P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">static if (is(T
                                : Storage!(STORAGETYPE)))</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">static if (T :
                                Storage!(STORAGETYPE))</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">'is' probably
                                can be safely dropped</FONT></P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">static if
                                (is(VALUE TYPE == typedef))</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">static if
                                (VALUE TYPE == typedef)</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">1. This one
                                is a bit tricky. Alternative could be:</FONT></P>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">static if
                                (VALUE TYPE == typedef(TYPE))</FONT></P>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">to be exact
                                pattern matching without 'magic' <BR>2. Here I used '==' instead
                                of ':' It should mean  that we are expecting <B>exact</B>
                                matches. Using ':' causes also indirect cases: derived classes
                                and types which can be implicitly casted. In many cases it will
                                be evaluated to exactly same result</FONT></P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">static if (is(T
                                TYPE == TYPE*) || is(T == class))</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">static if (T
                                TYPE == TYPE* || T == class)</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><BR>
                                </P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">static if
                                (isString!(VALUE))</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">static if
                                (isString!(VALUE))</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">it should
                                still work as static if takes as parameter boolean <B>value</B>,
                                which is exactly what we get after evaluating isString!(T).</FONT></P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">static if
                                (is(VALUE TYPE == TYPE*))</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">static if
                                (VALUE TYPE == TYPE*)</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><BR>
                                </P>
                        </TD>
                </TR>
                <TR>
                        <TD COLSPAN=3 WIDTH=100% VALIGN=TOP BGCOLOR="#ffff99">
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt"><B>Things
                                currently not possible:</B></FONT></P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><BR>
                                </P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">static if (T :
                                Storage!(STORAGETYPE) if (T == MyType))</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><BR>
                                </P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><BR>
                                </P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">static if(T ==
                                invariant)</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">well I am not
                                much in const stuff, but uniform syntax opens door for this also.</FONT></P>
                        </TD>
                </TR>
                <TR>
                        <TD COLSPAN=3 WIDTH=100% VALIGN=TOP BGCOLOR="#ffff99">
                                <P LANG="zxx" ALIGN=CENTER><FONT SIZE=3><B>static assert</B></FONT></P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">static
                                assert(is(VALUE : class), &quot;Classes are not supported&quot;);</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">static
                                assert(VALUE : class, &quot;Classes are not supported&quot;);</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><BR>
                                </P>
                        </TD>
                </TR>
                <TR>
                        <TD COLSPAN=3 WIDTH=100% VALIGN=TOP BGCOLOR="#ffff99">
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt"><B>Things
                                currently not possible:</B></FONT></P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><BR>
                                </P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">static assert(V
                                E K : E[K]  if (K == int), &quot;Not supported&quot;);</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">Well, not
                                very good example because it is enough to write:</FONT></P>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">static
                                assert(V E : E[int], &quot;Not supported&quot;);</FONT></P>
                                <P LANG="en-US"><BR>
                                </P>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">Just to get
                                idea what can be possible.</FONT></P>
                        </TD>
                </TR>
                <TR>
                        <TD COLSPAN=3 WIDTH=100% VALIGN=TOP BGCOLOR="#ffff99">
                                <P LANG="zxx" ALIGN=CENTER><B>alias syntax</B></P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">alias
                                Variant[][] table;</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">alias
                                Variant[][] table;</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><BR>
                                </P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><BR>
                                </P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><BR>
                                </P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><BR>
                                </P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><BR>
                                </P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><BR>
                                </P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><BR>
                                </P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><BR>
                                </P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><BR>
                                </P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><BR>
                                </P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><BR>
                                </P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><BR>
                                </P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><BR>
                                </P>
                        </TD>
                </TR>
                <TR>
                        <TD COLSPAN=3 WIDTH=100% VALIGN=TOP BGCOLOR="#ffff99">
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt"><B>Things
                                currently not possible:</B></FONT></P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><BR>
                                </P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">alias
                                Variant[][] A B C;</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">aliases
                                Variant[][] to all symbols: A and B and C</FONT></P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><BR>
                                </P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">alias T U :
                                U[];</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">simple
                                decomposition of types<BR>aliases U to element type of T; if the
                                whole compile-time expression evaluates to false it is
                                compile-time error.<BR>currently it is necessary to use
                                artificial static if () statement to decompose type.</FONT></P>
                        </TD>
                </TR>
                <TR VALIGN=TOP>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><BR>
                                </P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="zxx"><FONT SIZE=2 STYLE="font-size: 9pt">alias T U N :
                                U[N=uint] if (N&gt;100);</FONT></P>
                        </TD>
                        <TD WIDTH=33%>
                                <P LANG="en-US"><FONT SIZE=2 STYLE="font-size: 9pt">aliases U to
                                static array element type; and N to value of type uint, but only
                                if size of static array is bigger than 100.</FONT></P>
                        </TD>
                </TR>
        </TBODY>
</TABLE>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
<P LANG="en-US" STYLE="margin-bottom: 0cm"><BR>
</P>
</BODY>
</HTML>