Listing 1: An alternative to expression templates

template <class T, int SPACE>
{
    //...
    Array(int FirstDimension...);
};
     
template <class T, int SPACE>
Array<T, SPACE>::Array(int FirstDimension...)
{
    va_list Args;
    va_start(Args, FirstDimension);
    size_t LowerOrderDims[SPACE - 1];
    for (int i = 0; 
         i != SPACE - 1 && 
             (LowerOrderDims[i] = 
                 va_arg(Args, int)) > 0;
         ++i)
        ;       // do nothing (all job done 
                // in the loop)
    bool Ok = i == SPACE - 1 && 
              va_arg(Args, int) == -1; 
    va_end(Args);
    if (!Ok) 
    {
        // error handling goes here
    }
    data = new Array<T, SPACE-1>[
               dim = FirstDimension]; 
    for (i = 0; i < dim; ++i)
        data[i].init(LowerOrderDims);
}

/* End of File */