allow abstract variance (closes #2584) (closes #2063)