
Hi, I have gotten my hands pretty dirty with my array expression DSEL, and hove gotten surprisingly far (surprisingly considering the amounts of black template magic involved :) ). Now I am stuck with a templated recursive transform, that I cant seem to get right. Here is a stripped down version: template<typename T, typename IndexSet> struct ExpressionIteratorBuilder : proto::or_< proto::when< cpudata_indexing_grammar< proto::_ > , TerminalIteratorBuilder<T, IndexSet>( proto::_ ) > ,proto::when< proto::unary_plus< cpudata_grammar > , ExpressionIteratorBuilder<T, IndexSet>( proto::_left ) >
{}; so what does work is when I have the first case (i.e. the expression is just an indexed array terminal), but the second case, where it recurses breaks on instantiation. I have tried all the tricks from the proto docs, i.e. adding a dummy callable template parameter, specializing boost::proto:::is_callable, and wrapping the recursion in proto::call, always the same long error. It also works when ExpressionIteratorBuilder is not a template, though that would not make it very useful. Any ideas? Otherwise I am beginning to love proto, and am looking forward to c++0x when the error messages might become readable through concepts :). Best Daniel -- --- Daniel Oberhoff Fraunhofer FIT Schloss Birlinghoven 53754 Sankt Augustin, Germany Tel.: +49-(0)-2241-14-3486 Fax.:+49 (0) 2241/14-2080