Использование оператора pseudo-destructor-nameпосле точки . или стрелки -> представляет деструктор для неклассового типа, обозначенного type-nameили decltype-specifier. Результат должен использоваться только как операнд для оператора вызова функции (), и результат такого вызова имеет тип void. Единственный эффект - это оценка postfix-expressionперед точкой или стрелкой.
Левая часть оператора точки должна быть скалярного типа. Левая часть оператора стрелки должна быть указателем на скалярный тип. Этот скалярный тип является типом объекта. В cv-unqualified версия типа объекта и типа назначенного pseudo-destructor-nameдолжна быть тем же типом. Кроме того, два type-names в pseudo-destructor-nameформе a
nested-name-specifieropt type-name :: ~ type-name
должен обозначать один и тот же скалярный тип (игнорируя cv-квалификацию).