Clang-Tidy:冗余的'operator <<'声明

时间:2018-11-13 11:34:32

标签: c++ templates clang-tidy

我正在尝试给班级写一个朋友运算符<<,并且得到了这个多余的警告。而且不知道如何解决它。

谢谢。

#include <iostream>
using namespace std;

template<class  T>
class test
{
public:
    explicit test(T a)  noexcept : m_{ a } {}
    template <class Y>

    //line below shows that warning.
    friend std::ostream& operator<<(std::ostream& out, const test<Y>& lhs);
private:
    T m_;
};

template<class Y>
std::ostream& operator<<(std::ostream& out, const test<Y>& lhs)
{
    out << lhs.m_ << endl;
    return out;
}


int main()
{
    test<int>    p {25};
    test<double> q {17.5};

    std::cout << "By Friend " << p;
    std::cout << "By Friend " << q;
    return 0;
}

编辑1     //从运算符中删除模板Y <<类声明中的

template<class  T>
class test
{
public:
    explicit test(T a)  noexcept : m_{ a } {}
    friend std::ostream& operator<< (std::ostream&, const test<T>&);
private:
    T m_;
};

template<class T>
std::ostream& operator<<(std::ostream& out, const test<T>& lhs)
{
    out << lhs.m_ << endl;
    return out;
}

现在我收到警告

  

警告:朋友声明'std :: ostream&运算符<<(std :: ostream&,const test&)'声明一个非模板函数[-Wnon-template-friend]

PS:在Visual Studio中,我出现了错误链接

编辑1.2 //已完成EDIT 1

的编辑

我将Edit 1更改如下:

....
friend std::ostream& operator<< <> (std::ostream&, const test<T>&);
....

因此警告和错误链接已解决。

0 个答案:

没有答案