8 template<class T> struct D
 
    12   D(const T &tt) :t(tt) {};
 
    14   template<class X> struct TA : public T {
 
    16     TA(const T &t,const X& x) : T(t), a(x) {};
 
    18   template<class X> D<TA<X> > setA(const X &x) {
 
    19     return D<TA<X> >(TA<X>(this->t,x));
 
    22   template<class X> struct TB : public T {
 
    24     TB(const T &t,const X& x) : T(t), b(x) {};
 
    27   template<class X> D<TB<X> > setB(const X &x) {
 
    28     return D<TB<X> >(TB<X>(this->t,x));
 
    31   template<class X> struct TC : public T {
 
    33     TC(const T &t,const X& x) : T(t), c(x) {};
 
    36   template<class X> D<TC<X> > setC(const X &x) {
 
    37     return D<TC<X> >(TC<X>(this->t,x));
 
    41     //Itt csinalunk valamit
 
    53   d().setA(5.5).setB(10).setC(1.5e12);