@@ -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) {
@@ -390,6 +392,69 @@ class TestUnusedFunctions : public TestFixture {
390392 " void (*list[])(void) = {f}" );
391393 ASSERT_EQUALS (" " , errout.str ());
392394 }
395+
396+ void operatorOverload () {
397+ check (" class A {\n "
398+ " private:\n "
399+ " friend std::ostream & operator<<(std::ostream &, const A&);\n "
400+ " };\n "
401+ " std::ostream & operator<<(std::ostream &os, const A&) {\n "
402+ " os << \" This is class A\" ;\n "
403+ " }" );
404+ ASSERT_EQUALS (" " , errout.str ());
405+
406+ check (" class 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 &, const A &){ return A(); }\n "
411+ " A operator % (const A &, const A &){ return A(); }\n "
412+ " A operator & (const A &, const A &){ return A(); }\n "
413+ " A operator | (const A &, const A &){ return A(); }\n "
414+ " A operator ~ (const A &){ return A(); }\n "
415+ " A operator ! (const A &){ return A(); }\n "
416+ " bool operator < (const A &, const A &){ return true; }\n "
417+ " bool operator > (const A &, const A &){ return true; }\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 A &){ return A(); }\n "
423+ " A operator &= (const A &, const A &){ return A(); }\n "
424+ " A operator ^= (const A &, const A &){ return A(); }\n "
425+ " A operator |= (const A &, const A &){ return A(); }\n "
426+ " A operator << (const A &, const int){ return A(); }\n "
427+ " A operator >> (const A &, const int){ return A(); }\n "
428+ " A operator <<= (const A &, const int){ return A(); }\n "
429+ " A operator >>= (const A &, const int){ return A(); }\n "
430+ " bool operator == (const A &, const A &){ return true; }\n "
431+ " bool operator != (const A &, const A &){ return true; }\n "
432+ " bool operator <= (const A &, const A &){ return true; }\n "
433+ " bool operator >= (const A &, const A &){ return true; }\n "
434+ " A operator && (const A &, const int){ return A(); }\n "
435+ " A operator || (const A &, const int){ return A(); }\n "
436+ " A operator ++ (const A &, const int){ return A(); }\n "
437+ " A operator ++ (const A &){ return A(); }\n "
438+ " A operator -- (const A &, const int){ return A(); }\n "
439+ " A operator -- (const A &){ return A(); }\n "
440+ " A operator , (const A &, const A &){ return A(); }\n " );
441+ ASSERT_EQUALS (" " , errout.str ());
442+
443+
444+ check (" class A {\n "
445+ " public:\n "
446+ " static void * operator new(std::size_t);\n "
447+ " static void * operator new[](std::size_t);\n "
448+ " };\n "
449+ " void * A::operator new(std::size_t s) {\n "
450+ " return malloc(s);\n "
451+ " }\n "
452+ " void * A::operator new[](std::size_t s) {\n "
453+ " return malloc(s);\n "
454+ " }" );
455+ ASSERT_EQUALS (" " , errout.str ());
456+ }
457+
393458};
394459
395460REGISTER_TEST (TestUnusedFunctions)
0 commit comments