请考虑以下代码段:
struct Foo {};
int main()
{
Foo f;
f.~decltype(f)(); // fine with clang, error with gcc
f.~decltype(auto)(); // error with both clang and gcc
}
Run Code Online (Sandbox Code Playgroud)
显式析构函数调用的规则由标准语法处理,pseudo-destructor-name其定义如下:
pseudo-destructor-name:
nested-name-specifier opt type-name :: ~type-name
nested-name-specifier template simple-template-id :: ~type-name
~type-name
~decltype-specifier
和:
decltype-specifier:
decltype(expression)
decltype(auto)
那么上面的片段不应该按照标准格式良好吗?(不考虑析构函数被调用两次然后第三次调用同一个对象的事实.)