gpt4 book ai didi

c++ - 未定义的类模板未实例化以检查友元函数

转载 作者:行者123 更新时间:2023-12-01 14:25:16 24 4
gpt4 key购买 nike

下面的程序可以编译(参见 godbolt ),但如果我们取消注释 Buffer 的定义,它就不会编译。 .

template <int size>
struct Buffer /*{ char buf[size]; }*/;

template <class T>
struct Wrapper { void operator+() {} };

Wrapper<Buffer<-5>> a;

void f() { +a; }

原因,未注释的版本无法编译:+a触发 ADL,并收集 operator+ 的所有候选人,必须检查所有关联类的 friend职能。 Buffer<-5>是一个关联类,所以它必须被实例化。实例化失败,因此编译错误。参见 this question .

我想知道 Buffer<-5>必须实例化,为什么我们没有编译错误,如果 Buffer没有定义?

最佳答案

可以(隐式地)仅从一个声明中实例化一个类模板;你得到一个不完整的类类型,就像 struct A; ( [temp.inst]/2 ) 一样。当然,使用不完整的关联类进行 ADL 并不是错误;有问题的类根本不会搜索友元声明。

关于c++ - 未定义的类模板未实例化以检查友元函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62351110/

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