Используя черновой стандарт С, который мне удалось отследить (N1124), у нас есть похожие правила. В разделе о дополнительных выражениях (& sect; 6.5.6 / 2) говорится, что
Кроме того, либо оба операнда должны иметь арифметический тип, либо один операнд должен быть
указатель на тип объекта
И тип объекта определен в & sect; 6.2.5 / 1 как
Значение значения, хранящегося в объекте или возвращаемого функцией, определяется типом выражения, используемого для доступа к нему. (Идентификатор, объявленный как объект, является самым простым таким выражением; тип указан в объявлении идентификатора.) Типы разбиты на типы объектов (типы, которые полностью описывают объекты), типы функций (типы которые описывают функции), и неполные типы (типы, которые описывают объекты, но не имеют информации, необходимой для определения их размеров).
Поскольку типы функций отличаются от типов объектов, это говорит о том, что арифметика указателей на указатели функций запрещена.
В C ++ эта операция недопустима. Определение добавления указателя, данное в разделе 5.7 / 1, гласит следующее:
Кроме того, оба операнда должны иметь арифметический тип или тип перечисления, или один операнд должен быть указателем на полностью определенный тип объекта , а другой должен иметь целочисленный тип или тип перечисления.
Однако в разделе 3.9 / 9 говорится, что
Тип объекта - это (возможно, cv-квалифицированный) тип, который не является типом функции , не является ссылочным типом и не является пустым типом.
В совокупности это означает, что вы не можете увеличить указатель на функцию в C ++.
Надеюсь, это поможет!