使用模板关键字的伪析构函数调用

时间:2017-10-21 18:58:28

标签: c++ templates destructor explicit-destructor-call pseudo-destructor

以下代码does not compile with clang 5.0.0(编译标志为-std=c++14 -Wall -Wextra -Werror -pedantic-errors -O0):

struct foo
{
};

int main()
{
    foo f;

    f.~decltype(f)();          // OK
    f.template ~decltype(f)(); // OK

    int i{};

    i.~decltype(i)();          // OK
    i.template ~decltype(i)(); // error: expected unqualified-id
}

这是一种强制使用template关键字编译伪析构函数调用的方法吗?

1 个答案:

答案 0 :(得分:4)

据我所知,[temp.names] / 5禁止这两个.template …查找:

  

以关键字模板为前缀的名称应为template-id,或者名称应引用类模板或别名模板。 [注意:关键字模板可能不适用于类模板的非模板成员。 - 结束说明]

这些析构函数名称都不是 template-id ,也不是引用类模板或别名模板。但是,我可能会遗漏一些东西。