Вы уверены, что у вас есть правильный объект, соответствующий классу, в котором находится функция-член foo? Другими словами, в коде, который вы разместили, тип * это такой же, как SomeObject? Псевдоним возникает, когда компилятору приходится отслеживать несколько указателей разных типов на одних и тех же необработанных данных, поэтому я подозреваю, что типы * this и SomeObject не совпадают.