gpt4 book ai didi

c++ - 使用 decltype 显式调用析构函数

转载 作者:IT老高 更新时间:2023-10-28 23:18:38 27 4
gpt4 key购买 nike

考虑以下代码段:

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 定义如下:

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

最佳答案

您的程序格式不正确。
§7.1.6.4/[dcl.spec.auto] 规定:

A program that uses auto or decltype(auto) in a context not explicitly allowed in this section is ill-formed.

在那里,我找不到任何可以让你写这个的东西。通常,decltype(auto) 仅用于变量和函数声明。不过,语法允许的事实并不意味着它的格式正确。

因此,像 f.~decltype(f)() 这样的写法并没有被明确禁止,并且在语法中是允许的。 GCC 无法编译它的事实很可能是一个错误。

关于c++ - 使用 decltype 显式调用析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46910844/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com