Hi list,

  Previously (tested with gcc-4.5.3), constructs like this:-

-- foo.h

struct sigpacket
{
  int __stdcall process () __attribute__ ((regparm (1)));
};

-- foo.cpp

#include "foo.h"

int __stdcall
sigpacket::process ()
{
  return 2;
}

--------------------------

... used to work, with the attribute from the declaration being applied also
to the definition.

> $ g++-4 --version
> g++-4 (GCC) 4.5.3
> Copyright (C) 2010 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions.  There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> 
> 
> $ g++-4 -W -Wall -c foo.cc -o foo.o
> 

  With >= gcc-4.7, this results in an error:

> $ /usr/bin/g++-4 --version
> g++-4 (GCC) 4.7.2
> Copyright (C) 2012 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions.  There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> 
> 
> $ /usr/bin/g++-4 -W -Wall -c foo.cc -o foo.o
> foo.cc:4:21: error: new declaration 'int sigpacket::process()'
> In file included from foo.cc:1:0:
> foo.h:3:17: error: ambiguates old declaration 'int sigpacket::process()'
> 
> $

  I can't find any reference to this changed behaviour in the 4.7 or 4.8
changes.html; was it intentional?

    cheers,
      DaveK

Reply via email to