[ create a new paste ] login | about

Link: http://codepad.org/evtcvanO    [ raw code | output | fork ]

C++, pasted on Jun 25:
template< class T > struct unused;

template<class RootT, template< class T> class T0>struct TrimUnused
{
    typedef T0<typename TrimUnused< RootT, unused >::Result > Result;
};

template< class RootT >struct TrimUnused< RootT, unused >
{
    typedef RootT Result;
};


template< class T > struct A : T{   void check(char* p){ *p = 'A'; T::check(++p); }};
struct Root{  void check(char* p){*p = 'R';} };

//! Класс-наследник
struct D : public TrimUnused< Root, A >::Result
{
    typedef TrimUnused< Root, A >::Result _BaseT;
    void check(char* p){    *p = 'D';_BaseT::check(++p); }
};

int main()
{
    typedef TrimUnused< Root, A > T1;
    cout<<typeid(T1::Result).name()<<endl;
    char temp[32] = { 0 };
    D d;
    d.check(temp);
    return 0;
}


Output:
1
1AI4RootE


Create a new paste based on this one


Comments: