struct C1 { static const int value = 5; }; struct C2 { static const int value = 6; }; template bool compareValues() { // Not all instantiations have T1 and T2 equal. Even if that's the case for // all instantiations in the program, there could still be more such // instantiations outside. return T1::value < T2::value || // GOOD T1::value < T1::value || // BAD [NOT DETECTED] C1::value < C1::value ; // BAD } bool callCompareValues() { return compareValues || compareValues(); } template struct enable_if {}; template struct enable_if { typedef T type; }; template typename enable_if::type constant_comparison() { return true; } struct Value0 { const static int value = 0; }; void instantiation_with_pointless_comparison() { constant_comparison(); // GOOD }