多个 Typedef 中“<<”的嵌套重载

Nested Overloading of '<<' within Multiple Typedefs

此代码在 CLion 1.2.4 中编译和运行,但是 GUI 指示错误(通过红色下划线),输出嵌套涉及 std::ostream,如下所述。这旨在与 std:cout 一起使用,到目前为止它确实如此。

Point是k维的一个点(一个向量)space.

Cluster就是这些点的集合(链表)。

Clusters 是一组簇(向量)。

当我将 typedef 替换为父 class(std::vector<double>Point)时,指示的错误仍然存​​在。

是否有误报此错误的理由?

typedef std::vector<double>Point;
typedef std::list<Point>Cluster;
typedef std::vector<Cluster>Clusters;

std::ostream& operator<< (std::ostream& os, Point& v) {
    if ( !v.empty() ) {
        os << v[0];
        for(ctr_type i = 1; i < v.size(); ++i)
            os << ", " << v[i];
    }
    return os;
}

std::ostream& operator<< (std::ostream& os, Cluster& v) {
    if ( !v.empty() ) {
        for(Cluster::iterator iter = v.begin(); iter != v.end(); iter++) {
            os << "\n";
            os << *iter;   // Error: Binary operator '<<' can't be applied to the expressions of type 'ostream' and 'Point'
        }
    }
    return os;
}

std::ostream& operator<< (std::ostream& os, Clusters& v) {
    if ( !v.empty() ) {
        for(Clusters::iterator iter = v.begin(); iter != v.end(); iter++) {
            os << *iter;   // Error: Binary operator '<<' can't be applied to the expressions of type 'ostream' and 'Cluster'
        }
    }
    return os;
}

编辑: 根据 Quuxplusone 的要求添加屏幕截图。

此外,围绕此问题的大多数错误报告似乎都围绕着字符串。

这是 CLion 中的错误:

https://youtrack.jetbrains.com/issue/CPP-6013

希望它能在不久的将来得到修复。