Псевдо-деструктор - это деструктороподобный синтаксис, вызываемый для неклассного типа:
typedef int I;
I x;
x.I::~I();
Если бы это было проанализировано «наивно», то парсер увидел бы следующие токены:
безусловный идентификатор (x
), имя типа (I
), ::
, побитовое отрицание, имя типа (I
), (
, )
, ;
.
«Побитовое отрицание» является проблемой, потому что если вы только что написали это:
~I();
Тогда это будет правильное выражение с другой семантикой. А именно такой же как ~0
. Следовательно, приведенное выше выражение должно быть проанализировано по-разному для учета контекста псевдодеструктора.