@@ -61,6 +61,8 @@ class TestUnusedFunctions : public TestFixture {
6161 TEST_CASE (lineNumber); // Ticket 3059
6262
6363 TEST_CASE (ignore_declaration); // ignore declaration
64+
65+ TEST_CASE (operatorOverload);
6466 }
6567
6668 void check (const char code[], Settings::PlatformType platform = Settings::Native) {
@@ -386,6 +388,69 @@ class TestUnusedFunctions : public TestFixture {
386388 " void (*list[])(void) = {f}" );
387389 ASSERT_EQUALS (" " , errout.str ());
388390 }
391+
392+ void operatorOverload () {
393+ check (" class A {\n "
394+ " private:\n "
395+ " friend std::ostream & operator<<(std::ostream &, const A&);\n "
396+ " };\n "
397+ " std::ostream & operator<<(std::ostream &os, const A&) {\n "
398+ " os << \" This is class A\" ;\n "
399+ " }" );
400+ ASSERT_EQUALS (" " , errout.str ());
401+
402+ check (" class A{};\n "
403+ " A operator + (const A &, const A &){ return A(); }\n "
404+ " A operator - (const A &, const A &){ return A(); }\n "
405+ " A operator * (const A &, const A &){ return A(); }\n "
406+ " A operator / (const A &, const A &){ return A(); }\n "
407+ " A operator % (const A &, const A &){ return A(); }\n "
408+ " A operator & (const A &, const A &){ return A(); }\n "
409+ " A operator | (const A &, const A &){ return A(); }\n "
410+ " A operator ~ (const A &){ return A(); }\n "
411+ " A operator ! (const A &){ return A(); }\n "
412+ " bool operator < (const A &, const A &){ return true; }\n "
413+ " bool operator > (const A &, const A &){ return true; }\n "
414+ " A operator += (const A &, const A &){ return A(); }\n "
415+ " A operator -= (const A &, const A &){ return A(); }\n "
416+ " A operator *= (const A &, const A &){ return A(); }\n "
417+ " A operator /= (const A &, const A &){ return A(); }\n "
418+ " A operator %= (const A &, const A &){ return A(); }\n "
419+ " A operator &= (const A &, const A &){ return A(); }\n "
420+ " A operator ^= (const A &, const A &){ return A(); }\n "
421+ " A operator |= (const A &, const A &){ return A(); }\n "
422+ " A operator << (const A &, const int){ return A(); }\n "
423+ " A operator >> (const A &, const int){ return A(); }\n "
424+ " A operator <<= (const A &, const int){ return A(); }\n "
425+ " A operator >>= (const A &, const int){ return A(); }\n "
426+ " bool operator == (const A &, const A &){ return true; }\n "
427+ " bool operator != (const A &, const A &){ return true; }\n "
428+ " bool operator <= (const A &, const A &){ return true; }\n "
429+ " bool operator >= (const A &, const A &){ return true; }\n "
430+ " A operator && (const A &, const int){ return A(); }\n "
431+ " A operator || (const A &, const int){ return A(); }\n "
432+ " A operator ++ (const A &, const int){ return A(); }\n "
433+ " A operator ++ (const A &){ return A(); }\n "
434+ " A operator -- (const A &, const int){ return A(); }\n "
435+ " A operator -- (const A &){ return A(); }\n "
436+ " A operator , (const A &, const A &){ return A(); }\n " );
437+ ASSERT_EQUALS (" " , errout.str ());
438+
439+
440+ check (" class A {\n "
441+ " public:\n "
442+ " static void * operator new(std::size_t);\n "
443+ " static void * operator new[](std::size_t);\n "
444+ " };\n "
445+ " void * A::operator new(std::size_t s) {\n "
446+ " return malloc(s);\n "
447+ " }\n "
448+ " void * A::operator new[](std::size_t s) {\n "
449+ " return malloc(s);\n "
450+ " }" );
451+ ASSERT_EQUALS (" " , errout.str ());
452+ }
453+
389454};
390455
391456REGISTER_TEST (TestUnusedFunctions)
0 commit comments