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