На cpp reference говорят, что два указателя одинаковы, если игнорируя квалификаторы cv верхнего уровня, они указывают на один и тот же тип. Тогда в примерах есть этот пример
int (* const *)(int *) and int (* volatile *)(int *) are similar;
Мне было интересно, как они должны быть похожими? AFAIK, те, которые представляют указатель на указатель на функцию, чтобы упростить их, можно переписать как
using XYZ = int(*)(int *);
const XYZ *; // A
volatile XYZ *; // B
Разве в этом случае не указатели A и B на разные типы?