add pure polymorphic ctci macro