gpt4 book ai didi

c++ - g++ 未报告未实例化模板中的某些错误

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

考虑这个例子:

class A
{
void foo();
public:
void bar();
};

template <class> class B
{
B()
{
A a;
a.foo(); // 1
A::bar(); // 2
a.bar(1); // 3
}
};

注意 B 永远不会被实例化。

clang++ 将所有三个标记的行报告为错误。 g++ (4.8.3) 接受行 12 并且只报告行 3

如果 B 被实例化,g++ 很高兴将所有三行报告为错误。

这是一个 g++ 错误吗?有人会这么认为。 A 不是依赖名称,应在模板定义时正常检查其成员。有我看不到的细微差别吗?

最佳答案

这些预实例化消息不是由标准强制执行的,而是由编译器决定的

n3337 § 14.6 - 8

No diagnostic shall be issued for a template definition for which a valid specialization can be generated. If no valid specialization can be generated for a template definition, and that template is not instantiated, the template definition is ill-formed, no diagnostic required.

强调我的

关于c++ - g++ 未报告未实例化模板中的某些错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24933592/

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