Listing 1: Required boilerplate code for attribute class A_

template <class Parent>
struct A_: public Parent {
    template <class T>
    A_(const T & t_): Parent(t_)
    {
        t_.set(this->a, A_<Unique_>());
    }
    
    template <class T>
    A_ & operator=(const T & t_)
    {
        Parent::operator=(t_);
        t_.set(this->a, A_<Unique_>());
        
        return *this;
    }
    
    template <class T>
    void set(double & t_, T t) const {
        Parent::set(t_, t);
    }        
    void set(double & a, A_<Unique_>) const
    {
         a = this->a;
    }    
    A_() {}
    
    double a;
};
— End of Listing —