using
, like typedef
, creates an alias, not a new type. Therefore, you cannot use GrandKid_2 to define itself.
You will surely need to create a new type :
struct GrandKid_2 : Child<GrandKid_2> {};
By the way, do you really want GrandKid_2
to be its own child ? Maybe you meant using GrandKid_2 = Child<GrandKid>