相关疑难解决方法(0)

用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 
}
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)

那么上面的片段不应该按照标准格式良好吗?(不考虑析构函数被调用两次然后第三次调用同一个对象的事实.)

GCC Live
Clang Live

c++ language-lawyer c++14 c++17

12
推荐指数
1
解决办法
391
查看次数

标签 统计

c++ ×1

c++14 ×1

c++17 ×1

language-lawyer ×1