我在另一个模板类中有以下嵌套模板类:
template<typename T>
struct A
{
template<typename V>
struct B {};
};
operator==
嵌套类型的非成员的签名是什么B
?以下天真的尝试不起作用:
template<typename T, typename V>
bool operator==(A<T>::B<V> left, A<T>::B<V> right);
Clang、GCC 和 MSVC 给出了各种不同的错误和/或提示出了什么问题,例如缺少template
关键字,但我没有尝试解决它。
请注意,这显然有效:
template<typename T>
struct A
{
template<typename V>
struct B {};
template<typename V>
friend bool operator==(B<V> left, B<V> right)
{
return true;
}
};
但是,我需要非成员声明的原因是使用 qdoc 记录它。qdoc 使用 clang 来解析源代码,它要求我提供operator==
我已经实际实现的声明,就像刚才显示的那样。