引用了N3797的 5.2.4/1 ,C++ 14最终工作草案:
在点之后使用伪析构函数名称.或箭头 - >运算符表示由type-name或decltype-specifier表示的非类型的析构函数.
题
pseudo-destructor-name,它只是枚举类型吗?它只是枚举类型吗?
不,伪析构函数调用在任何类型上都有效.
但是,这个怎么样?
enum Foo : int { ... };
typedef int Bar;
Foo a; a.~Foo (); // (1), legal
int b; b.~Bar (); // (2), legal
int c; c.~decltype(c) (); // (3), legal
int d; d.~int (); // (4), ill-formed... why?
Run Code Online (Sandbox Code Playgroud)
似乎很奇怪(4)是不正确的,其他所有都是合法的; 是不是调用的意图伪构造函数调用上int在所有情况下?
很明显我们在(3)或(4)中都没有使用decltype-specifier,所以问题是:
类型名称的定义可以在[dcl.type.simple]p1,并且表示类型名称是;
请注意,上面的列表不包括基本类型,这就是为什么(4)不正确,(3)不是; 即使我们调用伪析构函数调用上的int两种情况.
int是类型的名称,但它不是类型名称.