#include <iostream>
struct A { ~A(); };
A::~A() {
std::cout << "Destructor was called!" << std::endl;
}
typedef A AB;
int main() {
AB x;
x.AB::~AB(); // Why does this work?
x.AB::~A();
}
Выходной сигнал вышеуказанной программы:
Destructor was called!
Destructor was called!
Destructor was called!
Я предполагаю, что первые две строки принадлежат вызовам деструктора пользователя, а третья - из-за вызова деструктора при выходе из области main
функции.
По моему мнению, typedef является псевдонимом для типа. В этом случае AB
является псевдонимом для A
Почему это относится и к имени деструктора? Ссылка на спецификацию языка очень ценится.
Изменение: он был скомпилирован с использованием Apple LLVM версии 9.1.0 (clang-902.0.39.1) на macOS High Sierra версии 10.13.3.