------------------------------------------------------------
#include <iostream>
#include <map>

int main()
{
        std::map<int,int> dummy;
        for(int i=0;i<5;i++) dummy[i*2] = (100-i);

#ifdef BUG      
        for(auto itr=dummy.begin(),int i=0;itr!=dummy.end();++itr,++i)
                std::cout << "i:" << i << std::endl;
#endif

#ifdef WORKAROUND
        auto itr=dummy.begin();
        for(int i=0;itr!=dummy.end();++itr,++i)
                std::cout << "i:" << i << std::endl;
#endif

        return 0;
}
------------------------------------------------------------

$ g++ -std=c++0x -DBUG -o auto.bug auto.bug.cpp
auto.bug.cpp: In function ‘int main()’:
auto.bug.cpp:10:29: error: expected unqualified-id before ‘int’
auto.bug.cpp:10:62: error: name lookup of ‘i’ changed for ISO ‘for’ scoping
auto.bug.cpp:10:62: note: (if you use ‘-fpermissive’ G++ will accept your code)

$ g++ -std=c++0x -DWORKAROUND -o auto.bug auto.bug.cpp


It should have worked the same in both the cases no?


-- 
           Summary: with -std=c++0x, auto and for loop does not play nice
                    when another variable is involved
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: ghodechhap at ghodechhap dot net
 GCC build triplet: x86_64-unknown-linux-gnu
  GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: x86_64-unknown-linux-gnu


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

Reply via email to