Greetings to all. I have been subclassing "symbol" for my project, where I need to attach an integer value to a symbol. I am not sure this is the best way to go about it but I would like to try. Everything works so far but now I have moved on to substituting variables in polynomials. Here is my sample program. #include <iostream> #include <ginac/ginac.h> #include "cindsymbol.h" #include "util.h" using namespace std; using namespace GiNaC; int main() { cindsymbol R = cindsymbol("R",0), G = cindsymbol("G",0), B = cindsymbol("B",0), X = cindsymbol("X",0); ex pl = X + pow(X, 3) + R + G + B; cout << R << G << B << " " << pl << endl; cout << pl.subs({X}, {pow(X,4)}) << endl; return 0; } The output of this program is as follows (the print functions from the subclass are being invoked correctly and do not print the zero value): RGB X+R+G+B+X^3 4*X^4+X^12 Obviously GiNaC thinks that R=X, B=X and G=X. How do I get this comparison to work? Do I need to override some function in my subclass? The function "cindsymbol" goes as follows (copied from the tutorial): static map<string, cindsymbol> directory; cindsymbol cindsym(const std::string & initname, unsigned cl) { std::string key = initname + "|" + std::to_string(cl); map<std::string, cindsymbol>::iterator it = directory.find(key); if (it != directory.end()) return it->second; else{ std::pair<std::string, cindsymbol> ent = make_pair(key, cindsymbol(initname, cl)); return directory.insert(ent).first->second; } } Can you advise me here? Thanks! Best regards, Marko Riedel