以下代码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
关键字编译伪析构函数调用的方法吗?
答案 0 :(得分:4)
据我所知,[temp.names] / 5禁止这两个.template …
查找:
以关键字模板为前缀的名称应为template-id,或者名称应引用类模板或别名模板。 [注意:关键字模板可能不适用于类模板的非模板成员。 - 结束说明]
这些析构函数名称都不是 template-id ,也不是引用类模板或别名模板。但是,我可能会遗漏一些东西。