The Macro ILCREV was for a pointer of an instance of a class. If you want to have your class reversible it is up to you to save the values of the fields that needs to backtrack when you modify them. If your backtrack involves many changes, then it is probably simpler (and it consumes less memory) to use reversible actions. That is you write a goal that contains the code to be executed to restore the state of your data structure. Have a look at void IloCP::addReversibleAction(const IlcGoal goal) in the documentation.