This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: PATCH RFA: Support -Wmissing-declarations in C++
On Thu, 14 Dec 2006, Ian Lance Taylor wrote:
[...]
| > What you have to do is consider how warnings intereacts with idiomatic
| > C++. Idiomatic C++, means that people use many third-party libraries,
| > and those libraries tend to have their implementations in headers. A
| > situation that is very different from C.
|
| I'm trying to sort out what your real objection is. I know that the
| warning was clearly useful for real code here, and would have avoided
| a real bug if it had been available.
|
| Suppose I adjust the code so that it does not warn about functions
| explicitly declared inline. Would that help address your concerns?
My objection stems from looking at how C++ codes are written, and how
programs are composed and the implication of a warning switch like
-Wmissing-declarations (which has lot of ressemblance with -Weffc++).
(1) the switch is based on the assumption that you would have a
declaration set in one file that people would include in
implementation files -- pretty standard 101 coding.
(2) That assumption used to hold 20 years ago for C++. However, it is less
verified for modern C++. For good or bad, most of libraries
come in header files (because they are either templates or inline
functions) and there no longer is a clear separation between
implementation and "interfaces" (and those are subject to pretty
strong ODR requirements, which makes the kind of mistakes you
would like to prevent very unlikely, but the implementation would
generate lot of noise).
Consequently, the premise (1) when mechanically enforced without
considerations of how modern C++ programs are written will act
like a virus: it will fired up not only in the implementation
files that was supposed to be checked, but also in third party
libraries used as components (because many of them come in header
files). [This has been happening for real with -Weffc++.]
You can reduce the virus effect by not flagging inline functions,
function templates (whether declared inline of not).
It is also helpful to consider libraries freely available to see
how people write codes and how it will affect them.
-- Gaby