updated implementation of class generic_argument