[Bug c++/55173] New: GCC gives wrong location, and ignores -isystem, when warning about default arguments

mw_triad at users dot sourceforge.net gcc-bugzilla@gcc.gnu.org
Thu Nov 1 23:01:00 GMT 2012


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55173

             Bug #: 55173
           Summary: GCC gives wrong location, and ignores -isystem, when
                    warning about default arguments
    Classification: Unclassified
           Product: gcc
           Version: 4.7.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: mw_triad@users.sourceforge.net


This came up originally related to bug 52718, but according to Paolo there, is
not actually related at all...

Consider the following header:

#pragma GCC system_header // or include via -isystem
class Foo
{
  Foo(void* = 0);
};
class Bar
{
  Bar(Foo = 0, void* = 0)
};

The following instantiation:

Bar bar;

...trips -Wzero-as-null-pointer-constant (also, the warning is reported in the
source file, not the header).

This appears to only happen when a default parameter implicitly invokes a
constructor, where the warning occurs in the constructor invocation. IOW, this:

Bar bar(nullptr);

...does not trigger a warning, as 'Foo(nullptr)' is okay.

Besides the less-helpful-than-desired diagnostic, this behavior is unfortunate,
as it prevents promoting warnings to errors in the face of such constructs, or
else forcing programmers to avoid use of default parameters.



More information about the Gcc-bugs mailing list