При чём тут рекурсия, не понимаю. Примерно все три строки кода я и привел. Причем после своих же объяснений понимаю откуда warning :)
Просто проверки, если есть объект с фиксированным адресом, то любая допустимая с его адресом арифметика (выходящая за пределы его sizeof) это доступ к массиву. Вычитание смещения при приведении к Derived как раз эту проверку и возбуждает.
В общем, каст легальный и работает. Рекурсию того вида, что я предполагал получить очень сложно (компилятор умный - экземпляр не до конца определенного типа не даст создать, только указатели на него). Что из себя представляет list_member? P.S. А может, я просто слишком долго играл с CRTP (всякие ATL, WTL, самописные фреймворки) и знаю как её не поломать почти на уровне инстинктов.... Но было забавно видеть два разных указателя, один со структурой и один с данными. Суть происходящего в том, что когда вызывается метод все типы определены и соответственно математика каста работает.