Hello,

the following code

 struct A { };
 struct B { B( A& ) { } };

 void foo( A& a ) { B( a ); }

results in this output:
 g++ t.cc -c

 t.cc: In function `void foo(A&)':
 t.cc:4: error: declaration of 'B a' shadows a parameter
 t.cc:4: error: no matching function for call to `B::B()'
 t.cc:2: note: candidates are: B::B(const B&)
 t.cc:2: note:                 B::B(A&)

With a workaround (extra cast) in foo, it however compiles ok:

 void foo( A& a ) { B( (A&)a ); }

Yours,

Timo Erkkilä

Ps. g++ -v
Reading specs from
/share/local/lang/gcc342-sol7/bin/../lib/gcc/sparc-sun-solaris2.7/3.4.2/specs
Configured with: ../../gcc-3.4.2/configure --prefix=/opt/local/lang/gcc342-sol7
--enable-shared --enable-cpp --disable-threads --with-gnu-ld
--with-ld=/opt/local/lang/gcc342-sol7/bin/ld --with-gnu-as
--with-as=/opt/local/lang/gcc342-sol7/bin/as --with-cpu=supersparc --disable-nls
--disable-multilib --enable-c99 --enable-concept-checks --with-dwarf2
--enable-languages=c,c++
Thread model: single
gcc version 3.4.2

-- 
           Summary: Parsing problem in the constructor call of temporary
                    object
           Product: gcc
           Version: 3.4.2
            Status: UNCONFIRMED
          Severity: minor
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: timo dot erkkila at tut dot fi
                CC: gcc-bugs at gcc dot gnu dot org
  GCC host triplet: sparc-sun-solaris2.7


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

Reply via email to