hasSideEffects should be marked virtual