Given the following C++ source code void g(); void h();
void f( int a, int b) { if (b = 1) // case 1 - fixed constant on rhs. g() always executed. g(); if (b = a) // case 2 - variable on rhs. h() might be executed. h(); } then GNU C++ 4.2 snapshot says [EMAIL PROTECTED]:~/C++/Alphasrc> ~/gnu/42-20060114/results/bin/g++ -c -Wall jan15b.cc jan15b.cc: In function 'void f(int, int)': jan15b.cc:6: warning: suggest parentheses around assignment used as truth value jan15b.cc:8: warning: suggest parentheses around assignment used as truth value [EMAIL PROTECTED]:~/C++/Alphasrc> We can see the compiler fails to distinguish case 1 and case 2. Suggest enhance the compiler to say something different for case 1. Fixed constant on rhs is much more likely to be a programmer error, IMHO. Here is Intel C++ 9.0 doing what I want jan15b.cc(6): warning #187: use of "=" where "==" may have been intended if (b = 1) ^ -- Summary: constant on rhs of conditional assignment Product: gcc Version: 4.2.0 Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: dcb314 at hotmail dot com GCC host triplet: x86_64-suse-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25808