I have an inheritance chain of CRTP classes. The CRTP classes derive from each other, until a 'final' derived class passes itself as the CRTP parameter and finalizes the inheritance chain.

```
template <class W>
struct Base
{
    .....
};
template <class W>
struct Derived_inheritable: public Base<W>
{
....
}

template <class W>
struct Derived2_inheritable: public Derived_inheritable<W>
{
....
}

...

```

What I want to do is to be able to have such 'final' end-user classes at each level of the CRTP inheritance chain, that involve no templates:

```
typedef Derived1_inheritable<Derived1> Derived1;

```

As you can guess, this typedef does not work, because it references its own type being defined. The question is how to achieve this?
The way I could think of, is:

```
struct Derived1: public Derived1_inheritable<Derived1>
{
   //not convenient, need to redefine at least a forwarding constructor
}

```

As the comment in the code says, this is not a very elegant solution - I need to redefine the constructor to forward to the base constructor. Does anyone know a more elegant way?