Если не желаете подавлять предупреждение, можно явно указать компилятору:
class A1Increment: public AIncrement, public A1
{
virtual int FuncA()
{
return A1::FuncA();
}
};
Дело в том, что реализацию FuncA можно вызвать 2-мя способами a.AIncrement::FuncA() или a.A1::FuncA(). Вызовы несколько отличаются. 1-ый вызывает AIncrement::ISuperA::IA::FuncA через виртуальную таблицу, а 2-й вызывает непосредственно реализацию A1::FuncA. Компилятор честно (чтобы без неожиданностей) предупредил, что встроен вызов 2-го варианта.
Кстати, для виртуального наследования IA достаточно виртуально унаследовать IA. Ключевое слово virual лишнее в строках: