Re: Explicitly specializing std::min() on VC++ 2005 Express Edition
- From: "Matthias Hofmann" <hofmann@xxxxxxxxxxxxxx>
- Date: Fri, 11 May 2007 15:10:00 +0200
"Tom Widmer [VC++ MVP]" <tom_usenet@xxxxxxxxxxx> schrieb im Newsbeitrag
news:%23bKsalykHHA.4112@xxxxxxxxxxxxxxxxxxxxxxx
Matthias Hofmann wrote:
"Tom Widmer [VC++ MVP]" <tom_usenet@xxxxxxxxxxx> schrieb im Newsbeitrag
news:OJCC7GlkHHA.1340@xxxxxxxxxxxxxxxxxxxxxxx
Matthias Hofmann wrote:
"Tom Widmer [VC++ MVP]" <tom_usenet@xxxxxxxxxxx> schrieb im NewsbeitragIt's been reported and fixed apparently:
news:uCq1XvVkHHA.4188@xxxxxxxxxxxxxxxxxxxxxxx
The problem is that VC2005 is ignoring 5.16/4 (about ?: ):That's good news, I first thought that there was a bug in my code.
"If the second and third operands are lvalues and have the same type,
the result is of that type and is an lvalue."
Instead, it is applying the lvalue-to-rvalue conversion (e.g. the
array-to-pointer conversion) to the parts of the ?: expression, and
thus trying to return a pointer where an array is expected.
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=101496
I have just downloaded and installed Service Pack 1 for VC++ 2005 Express
Edition, which I found here:
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=7b0b0339-613a-46e6-ab4d-080d4d4a8c4e
The file I downloaded is named 'VS80sp1-KB926748-X86-INTL.exe'.
Unfortunately, it did not fix the bug, which shouldn't be a surprise, as
the report whose link you provided does not address any issues related to
the conditional operator.
It doesn't? Did you look at the steps to reproduce? The specific error
mentioned there is:
copy_t& D = (epsilon>0) ? (A) : (B); // this does not work
where copy_t is an array type (2D I think), which is essentially the
problem you were having, wasn't it? It's possible they've fixed a special
case of the general error. A simple test case is:
int main()
{
int a[1];
int (&aref)[1] = 1 ? a : a;
}
That should compile I think, but doesn't on my VC2005, no SP.
With Service Pack 1, this code does compile indeed, but the following
doesn't:
#include <cstring>
#include <iostream>
template <class T> struct minimum_impl
{
static const T& minimum(
const T& a, const T& b )
{
return a < b ? a : b;
}
};
template <std::size_t N> struct minimum_impl<char[N]>
{
static const char (& minimum( const char (&a)[N],
const char (&b)[N] ) )[N]
{
// Error here.
return std::strcmp( a, b ) < 0 ? a : b;
}
};
template <class T> inline
const T& minimum( const T& a, const T& b )
{
return minimum_impl<T>::minimum( a, b );
}
int main()
{
char a[] = "a";
char b[] = "b";
std::cout << minimum( a, b ) << std::endl;
return 0;
}
On the Microsoft website you have provided a link to, they are asking to
reopen the report if the problem persists: "If installing SP1 does not
resolve the issue for you, please reactivate." I would like to do that, but
unfortunately, I don't know how...
--
Matthias Hofmann
Anvil-Soft, CEO
http://www.anvil-soft.com - The Creators of Toilet Tycoon
http://www.anvil-soft.de - Die Macher des Klomanagers
.
- Follow-Ups:
- References:
- Explicitly specializing std::min() on VC++ 2005 Express Edition
- From: Matthias Hofmann
- Re: Explicitly specializing std::min() on VC++ 2005 Express Edition
- From: Tom Widmer [VC++ MVP]
- Re: Explicitly specializing std::min() on VC++ 2005 Express Edition
- From: Matthias Hofmann
- Re: Explicitly specializing std::min() on VC++ 2005 Express Edition
- From: Tom Widmer [VC++ MVP]
- Re: Explicitly specializing std::min() on VC++ 2005 Express Edition
- From: Tom Widmer [VC++ MVP]
- Re: Explicitly specializing std::min() on VC++ 2005 Express Edition
- From: Matthias Hofmann
- Re: Explicitly specializing std::min() on VC++ 2005 Express Edition
- From: Tom Widmer [VC++ MVP]
- Re: Explicitly specializing std::min() on VC++ 2005 Express Edition
- From: Matthias Hofmann
- Re: Explicitly specializing std::min() on VC++ 2005 Express Edition
- From: Tom Widmer [VC++ MVP]
- Re: Explicitly specializing std::min() on VC++ 2005 Express Edition
- From: Matthias Hofmann
- Re: Explicitly specializing std::min() on VC++ 2005 Express Edition
- From: Tom Widmer [VC++ MVP]
- Re: Explicitly specializing std::min() on VC++ 2005 Express Edition
- From: Matthias Hofmann
- Re: Explicitly specializing std::min() on VC++ 2005 Express Edition
- From: Tom Widmer [VC++ MVP]
- Explicitly specializing std::min() on VC++ 2005 Express Edition
- Prev by Date: Re: CRC Duplicate
- Next by Date: Re: relative size of object files vc6 vs vc2003 vs vc2005
- Previous by thread: Re: Explicitly specializing std::min() on VC++ 2005 Express Edition
- Next by thread: Re: Explicitly specializing std::min() on VC++ 2005 Express Edition
- Index(es):
Relevant Pages
|
Loading