使用 decltype 显式析构函数调用
Explicit destructor call with decltype
请考虑以下代码片段:
struct Foo {};
int main()
{
Foo f;
f.~decltype(f)(); // fine with clang, error with gcc
f.~decltype(auto)(); // error with both clang and gcc
}
显式析构函数调用的规则由标准语法处理,其定义如下pseudo-destructor-name
:
伪析构函数名称:
嵌套名称说明符 opt 类型名称 :: ~ 类型名称
嵌套名称说明符模板简单模板 ID :: ~类型名称
~ 类型名称
~ 描述型说明符
和:
描述类型说明符:
decltype ( 表达式 )
分类 ( 自动 )
那么上面的代码片段不应该按照标准格式正确吗?(不考虑析构函数在同一对象上被调用两次,然后第三次调用的事实。
海湾合作委员会直播
叮当直播
您的程序格式不正确。
§7.1.6.4/[dcl.spec.auto] 声明:
在本节中未明确允许的上下文中使用
auto
或decltype(auto)
的程序格式不正确。
在那里,我找不到任何可以让你写这篇文章的东西。通常,decltype(auto)
仅用于变量和函数声明。但是,语法允许的事实并不意味着它的格式正确。
因此,编写类似f.~decltype(f)()
的东西并没有被明确禁止,并且按照语法中所述是允许的。GCC 不会编译它的事实很可能是一个错误。
相关文章:
- 析构函数调用
- 在具有向量的类构造函数中进行析构函数调用
- 从 c++ 中派生类的析构函数调用虚函数
- C++析构函数调用两次,堆栈分配的复合对象
- C++ 在析构函数调用之前删除的动态成员数组
- 析构函数调用c++中的一个向量
- Singleton模式中的手动析构函数调用:调用多次
- 从内部类的析构函数调用虚拟函数
- 与 boost odeint 集成期间的析构函数调用
- 堆栈展开如何与析构函数调用有关?
- C++:优化析构函数调用
- 以逗号分隔的表达式中的析构函数调用
- GCC 9.1 返回 void& 作为显式析构函数调用的结果类型。这是一个错误吗?
- 从C++中的虚拟析构函数调用虚拟方法
- 从指针返回对象时出现意外的析构函数调用
- 使用 decltype 显式析构函数调用
- C++析构函数调用了错误的对象
- 了解虚拟函数和析构函数调用
- 多重继承析构函数调用他自己和父析构函数?c++
- 析构函数调用表单不适当的库