typedef FeatureReferenceHelper<FeatureSpecialized> SP;            \
  virtual void setReference(FeatureAbstract *sdes) {                \
    if (sdes == NULL) {                                             \
                                                         \
      if (SP::isReferenceSet()) removeDependenciesFromReference();  \
      SP::unsetReference();                                         \
    } else {                                                        \
                                                           \
      SP::setReference(sdes);                                       \
      if (SP::isReferenceSet()) addDependenciesFromReference();     \
    }                                                               \
  }                                                                 \
  virtual const FeatureAbstract *getReferenceAbstract(void) const { \
    return SP::getReference();                                      \
  }                                                                 \
  virtual FeatureAbstract *getReferenceAbstract(void) {             \
    return (FeatureAbstract *)SP::getReference();                   \
  }                                                                 \
  bool isReferenceSet(void) const { return SP::isReferenceSet(); }  \
  virtual void addDependenciesFromReference(void);                  \
  virtual void removeDependenciesFromReference(void)