【发布时间】:2019-03-15 22:48:57
【问题描述】:
以下代码格式正确吗?
class B;
template<class T>
class A
{
B do_f() const;
friend auto f(A const& a) {return a.do_f();} // #1
};
class B{};
template <class T>
B A<T>::do_f() const { return B{};}
int main()
{
A<double> a;
f(a);
}
如果我将 #1 中的 auto 更改为 B,则会收到不完整的类型错误消息。
使用 auto 编译 gcc/clang Demo
B Demo 失败
【问题讨论】:
-
这个简化版是同一个问题吗? godbolt.org/z/9V4fx7 注意:gcc 编译; clang 报错。
-
@RichardCritten:不确定,你的函数是模板,而我的是类模板的友元函数。
-
@RichardCritten,同样,Jarod42 代码适用于 gcc 和 clang。
标签: c++ templates language-lawyer auto incomplete-type