Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ clang中的显式调用伪析构函数_C++_Clang - Fatal编程技术网

C++ clang中的显式调用伪析构函数

C++ clang中的显式调用伪析构函数,c++,clang,C++,Clang,我试图调用显式伪析构函数: ns{ 模板 结构条{}; } 模板 无效示例(T x) { ns::bar().~NoWay(); } Clang++(3.3版)编译此代码时没有任何错误。但是NoWay未在代码中定义。这是正确的行为吗?我现在同意Potatoswatter:)程序格式不正确: [临时名称]/4 在后缀表达式或[…]中,成员模板专用化的名称出现在或->之后,并且后缀表达式的对象表达式依赖于类型 或[…],成员模板名称的前缀必须为关键字template。 否则,将假定该名称为非模板名

我试图调用显式伪析构函数:

ns{
模板
结构条{};
}
模板
无效示例(T x)
{
ns::bar().~NoWay();
}

Clang++(3.3版)编译此代码时没有任何错误。但是
NoWay
未在代码中定义。这是正确的行为吗?

我现在同意Potatoswatter:)程序格式不正确:

[临时名称]/4

在后缀表达式或[…]中,成员模板专用化的名称出现在
->
之后,并且后缀表达式的对象表达式依赖于类型 或[…],成员模板名称的前缀必须为关键字
template
。 否则,将假定该名称为非模板名称


非模板意味着
您是否尝试过编译对示例的调用?在强制实例化之前,可能无法检测到各种错误。您是否尝试调用示例函数?编译器只会在调用somewhereNo时创建函数。我只对它为什么被成功编译感兴趣。它应该被解析还是抱怨错误?从标准的角度来看。@需要查找NoWay的dyp名称,因为它不是当前实例化的成员。它是未知实例化的成员,并且不受
模板
的限制。(虽然不清楚这里是否存在使用
模板
的语法,但没有嵌套的名称说明符。)我认为应该立即出现失败。我知道我说过我现在要睡觉,但是……在存在有效专门化的要求中没有“当前”约束。该标准对潜在模板参数的样本空间有点模糊,但只有在扩展到整个程序中的所有类型时才有意义,否则无害的、无关的头很快就会出错。包含所有可能存在的类型和值的解释更有意义。
ns::bar<T>().template ~NoWay<T>();