gpt4 book ai didi

c++ - 为什么 VS 2008 编译时没有带有错误模板逻辑的警告?

转载 作者:行者123 更新时间:2023-11-30 04:30:21 25 4
gpt4 key购买 nike

我有一个简单的模板示例如下:

template<class T> class A {
friend int f(T);
}

int main(){
A<int> a;
return 0;
}

该代码在 VS2008 中编译和执行时没有警告(未使用的变量除外)。我认为应该有问题,因为我们在同一个类中获得了许多版本的非模板函数,只有一个定义。我错过了什么吗?

最佳答案

为什么这段代码会产生错误?对于您实例化 A 的每个 T,都会声明一个新函数并使其成为友元。永远不会有两个相同的函数,因为您不能为同一类型实例化一个模板两次(您只会重用旧的实例化)。

此外,即使以某种方式可能生成两个相等的声明,也不会有歧义,因为函数首先在类内部声明。因此,除了参数相关查找之外,它们永远不会被其他任何东西找到。 (基本上,这些函数是无用的,因为它们不能被调用)

§7.3.1.2 [namespace.memdef] p3

[...] If a friend declaration in a nonlocal class first declares a class or function the friend class or function is a member of the innermost enclosing namespace. The name of the friend is not found by unqualified lookup or by qualified lookup until a matching declaration is provided in that namespace scope (either before or after the class definition granting friendship). [...]

Also, see this .

关于c++ - 为什么 VS 2008 编译时没有带有错误模板逻辑的警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8752587/

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