bug: get_precedence() is not working
Pearu Peterson
pearu at cens.ioc.ee
Thu May 17 23:22:21 CEST 2001
On Wed, 16 May 2001, Richard B. Kreckel wrote:
> On Wed, 16 May 2001, Pearu Peterson wrote:
> > It seems to me that one has to define for each class, that redefines
> > basic::precedence, also the get_precedence() function. Clearly it is not
> > C++ way, but may be it is due to that basic::precedence is defined static.
> > Sorry, but right now I don't have any idea how to fix it...
>
> Thanks Pearu for the bugreport. Your analysis is correct.
>
> Christian, we've had the same trouble when we tried to make
> default_overall_coeff() an inline function in class expairseq returning
> a protected static ex(1) or ex(0) respectively for classes mul and add.
> This just doesn't work with static member variables. All alternatives
> which come to my mind are either preprocessor-based or replicate data and
> either way as ugly as sin. Any really good suggestion?
I played a bit with possible solutions (assuming static precedence) and it
seems that simplest solution is inserting the following line
public: unsigned get_precedence(void) const {return precedence;}
to the macro
GINAC_DECLARE_REGISTERED_CLASS
(Note that then there is little reason to keep basic::get_precedence())
Optimal (for the compiler but not for the programmer, I guess) solution
is:
When redefining precedence, redefine also get_precedence() in derived
class.
What do you think?
Pearu
More information about the GiNaC-devel
mailing list