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>();