incubator-stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Sebor <se...@roguewave.com>
Subject Re: Windows infrastructure for generating VisualStudio projects and solution(s)
Date Tue, 22 Aug 2006 18:15:30 GMT
Farid Zaripov wrote:
>>-----Original Message-----
>>From: Martin Sebor [mailto:sebor@roguewave.com] 
>>Sent: Tuesday, August 22, 2006 8:02 PM
>>To: stdcxx-dev@incubator.apache.org
>>Subject: Re: Windows infrastructure for generating 
>>VisualStudio projects and solution(s)
>>
>>The problem is not with the linking of the library, it comes 
>>up when compiling library headers that make assumptions about 
>>the scope of the for loop's controlling variable. Consider 
>>this algorithm defined in some public library header (i.e., 
>>one that can be included by a program, such as <algorithm>):
>>
>>   inline void
>>   some_algorithm (int __nloops)
>>   {
>>       for (int __i = 0; __i != __nloops; ++__i)
>>           do_something (__i);
>>
>>       for (int __i = 0; __i != __nloops; ++__i)
>>           do_something_else (__i);
>>   }
>>
>>The algorithm will compile with no errors or warnings when 
>>the /Zc:forScope is used but will cause a diagnostic when it's not.
> 
> 
>   I have been tested this example with MSVC 7.1 with Warning Level 4
> (highest possible) and haven't any diagnostics (warnings) :)

Well that's probably because MSVC is too broken to detect even
violations of its own conformance violations. Here's the output
from HP aCC 3.10 for the function above:

$ aCC -V -c t.cpp
aCC: HP ANSI C++ B3910B A.03.10
Error 173: "t.cpp", line 7 # Redefined symbol '__i'; previously defined at
     ["t.cpp", line 4].
         for (int __i = 0; __i != __nloops; ++__i)
                  ^^^
[...]
>   The warning issued at the line with do_something_else (__i); in the
> following case:
> 
>     inline void
>     some_algorithm (int __nloops)
>     {
>         int __i = 5;
> 
>         for (int __i = 0; __i != __nloops; ++__i)
>             do_something (__i);
>  
>         do_something_else (__i);
>     }
> 
> warning C4288: nonstandard extension used : '__i' : loop control
> variable declared in
>                        the for-loop is used outside the for-loop scope;
> it conflicts with the
>                        declaration in the outer scope
>             definition of outer scope '__i' used
>             definition of for-loop scope '__i' ignored

Right, that's the same thing. If the compiler was consistent it
would either warn about both case or neither.

Martin

Mime
View raw message