anchor.diff:  
     !---------------------------------------------------------------------------------------------------------------------------------
     if (lhs%is_unit_defined().and.rhs%is_unit_defined()) then
  -    if (lhs%unit%is_compatible(rhs%unit)) then
  +    if (lhs%is_compatible(quantity=rhs)) then
         call opr%set(magnitude=(lhs%magnitude + rhs%unit%scale_factor*rhs%magnitude/lhs%unit%scale_factor), &
                      unit=lhs%unit, units_system=lhs%units_system)
       else
  -      write(stderr, '(A)')'error: left and right terms of computation "l+r" have incompatible units!'
  -      write(stderr, '(A)')'result is nullified with units set equal to the one of left term!'
  -      call opr%set(unit=lhs%unit, units_system=lhs%units_system)
  +      call raise_error_incompatibility(operation='L+R')
  +      call opr%set(unit=null(), units_system=null())
       endif
     else
       ! dimensionless quantities assumed
  
positive.code:   call quantity%set(magnitude=magnitude, unit=unit, units_system=units_system)
    !---------------------------------------------------------------------------------------------------------------------------------
    endfunction creator
  
    ! public methods
    elemental function is_unit_defined(self) result(is_defined)
    !---------------------------------------------------------------------------------------------------------------------------------
    !< Check if the unit has been defined.
  
negative.code:   class(units_system_abstract), pointer, public :: units_system=>null() !< Units system.
    contains
      ! public methods
      procedure, pass(self) :: is_compatible           !< Check if the quantity is compatible with another one.
      procedure, pass(self) :: is_unit_defined         !< Check if the unit has been defined.
      procedure, pass(self) :: is_units_system_defined !< Check if the units system has been defined.
      procedure, pass(self) :: set                     !< Set quantity magnitude/unit/units system.
  