Я заметил, что вызов псевдо-деструктора действителен, когда используется имя типа, но не при использовании базового типа.
typedef int BType;
int b;
b.~BType(); // Legal
b.~int(); // Not legal
Объяснение вышесказанного можно найти в ответе на другое сообщение SO.
Определение типа-имени из стандарта С++ 11:
7.1.6.2 Спецификаторы простого типа, p1
type-name: class-name enum-name typedef-name simple-template-id
Существуют ли какие-либо другие языковые конструкции, которые действительны, когда спецификатор типа является именем типа, но не является допустимым, если он является фундаментальным типом, даже если имя типа представляет собой фундаментальный тип, как показано выше?