Re: Erroneous for-loop variable used with /Zc:forScope
- From: "Alexander Nickolov" <agnickolov@xxxxxxxx>
- Date: Mon, 20 Aug 2007 10:26:01 -0700
Up to some version of VC they used the older standard for
"for" scope by default. It's changed by a compiler option:
"Force Conformance In For Loop Scope" in the Language
subitem of C/C++ options in your project (at least that's
where it is in my VC 7.1). Set that to Yes to get standard
behavior.
Note, this is a feature, not a bug :)...
--
=====================================
Alexander Nickolov
Microsoft MVP [VC], MCSD
email: agnickolov@xxxxxxxx
MVP VC FAQ: http://vcfaq.mvps.org
=====================================
"Felipe" <felipe.m.almeida@xxxxxxxxx> wrote in message
news:1187604012.093458.202200@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Even with /Zc:forScope used, Compiling this code with Visual C++
Express 2005 tells me he is using the i from the most nested for-loop,
which is wrong! And gives an error for not having a assignment
operator. Proving is trying to use the i from the nested for-loop.
This compiles fine on Visual C++ 7.1 (2003) Professional and Visual C+
+ Express 9.0 Beta 2.
int main()
{
struct A {
A& operator++();
bool operator!=(int) const;
//A& operator=(int);
};
for(int i = 0; i < 10; i++)
{
for(A i; i != 20; ++i)
{
}
i = 5;
}
}
The error message:
subprojects\misvc\src\tnef_conversion.cpp(322) : warning C4822:
'try_convert_from_rfc2822::A::operator ++' : local class member
function does not have a body
subprojects\misvc\src\tnef_conversion.cpp(323) : warning C4822:
'try_convert_from_rfc2822::A::operator !=' : local class member
function does not have a body
subprojects\misvc\src\tnef_conversion.cpp(333) : 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
subprojects\misvc\src\tnef_conversion.cpp(328) : definition of
'i' used
subprojects\misvc\src\tnef_conversion.cpp(326) : definition of
'i' ignored
subprojects\misvc\src\tnef_conversion.cpp(333) : error C2679: binary
'=' : no operator found which takes a right-hand operand of type
'int' (or there is no acceptable conversion)
.
- Follow-Ups:
- Re: Erroneous for-loop variable used with /Zc:forScope
- From: Felipe Magno de Almeida
- Re: Erroneous for-loop variable used with /Zc:forScope
- References:
- Erroneous for-loop variable used with /Zc:forScope
- From: Felipe
- Erroneous for-loop variable used with /Zc:forScope
- Prev by Date: Re: build intermediate etc files
- Next by Date: Re: LPCSTR and LPCWSTR
- Previous by thread: Re: Erroneous for-loop variable used with /Zc:forScope
- Next by thread: Re: Erroneous for-loop variable used with /Zc:forScope
- Index(es):
Relevant Pages
|