GCC все типы, определения которых он не понял, считает int. Так еще GCC 1.х было.
То есть он прототип в классе C воспринял как void fun(int *), потому что не понял, что такое A и B.