В большинстве книг и статей единственным «безопасным» (или, по крайней мере, единственным рекомендуемым) способом множественного наследования является виртуальное наследование с чисто абстрактными базовыми классами (которые можно назвать виртуальными интерфейсами).
Причина, по большей части, заключается в том, чтобы избежать проблемы Алмаза, где можно создать неоднозначности для значения элементов данных или для статуса реализации не чистых виртуальных функций.
Чистый абстрактный базовый класс не страдает ни от (без элементов данных, ни от нечистых виртуалов), ни от виртуального наследования, даже устраняет неоднозначность фактического адреса памяти базового класса.
Но с учетом этого объяснения: если неоднозначность возникает только из форм «состояния» (например, членов данных, переменных статических функций), тогда класс не является неабстрактным без состояния (возможно, даже со всеми «конечными» методами) одинаково безопасно быть базовым классом в иерархии множественного наследования?
Какую возможную проблему я пропускаю?
PS: В случае, если ответ «Если нет виртуального метода, тогда вы могли бы использовать композицию в любом случае»: Помимо академического интереса, у меня есть случай, когда мне нужно свойство функций-членов, чтобы иметь возможность свободного затенения, глобальные функции в стиле C, поэтому я не могу получить к ним доступ через объект указатель на композицию.