In this question, Howard Hinnant said
Some implementations of std::tuple use recursive inheritance. But the good ones don\'t. ;-)
One reason not to use a chain of base classes is that there is no chain of constructors involved: the arguments are directly forwarded to the appropriate subobject. Also, it seems that a non-recursive implementation puts a lot less strain on the compiler and creates a lot less [internal] symbols. Not to mention that it is actually easier not to a chain of base classes.