Index: clang-tidy/hicpp/SignedBitwiseCheck.cpp =================================================================== --- clang-tidy/hicpp/SignedBitwiseCheck.cpp +++ clang-tidy/hicpp/SignedBitwiseCheck.cpp @@ -27,7 +27,9 @@ binaryOperator(allOf(anyOf(hasOperatorName("|"), hasOperatorName("&"), hasOperatorName("^"), hasOperatorName("<<"), hasOperatorName(">>")), - hasEitherOperand(SignedIntegerOperand))) + hasEitherOperand(SignedIntegerOperand), + hasLHS(hasType(isInteger())), + hasRHS(hasType(isInteger())))) .bind("binary_signed"), this); Index: test/clang-tidy/hicpp-signed-bitwise-bug34747.cpp =================================================================== --- /dev/null +++ test/clang-tidy/hicpp-signed-bitwise-bug34747.cpp @@ -0,0 +1,21 @@ +// RUN: %check_clang_tidy %s hicpp-signed-bitwise %t -- -- -std=c++11 | count 0 + +// Note: this test expects no diagnostics, but FileCheck cannot handle that, +// hence the use of | count 0. + +template +struct OutputStream { + OutputStream &operator<<(C); +}; + +template +struct foo { + typedef OutputStream stream_type; + foo(stream_type &o) { + o << 'x'; // warning occured here, fixed now + } +}; + +void bar(OutputStream &o) { + foo f(o); +}