Default Array Initialization Bug

M

Marcus Kwok

I found a bug in VC++ .NET 2003 regarding default initialization of
arrays of primitives in a constructor initialization list, as detailed
in this post:
http://groups.google.com/group/comp.lang.c++/msg/dab44a8b786b6a79

and in the reply by Dietmar Kuehl, in which he quotes the relevant
portion of the C++ Standard:
http://groups.google.com/group/comp.lang.c++/msg/71a9fecc4f5d7d57

I tried to file a bug report at
http://lab.msdn.microsoft.com/productfeedback/default.aspx
but they only let you submit bug reports for VC++ 2005, which I am
unable to install at the moment, and I am not sure if the bug is present
in the newer version.

Can anybody confirm if this bug is present in the newer version?
 
B

Bruno van Dooren

I found a bug in VC++ .NET 2003 regarding default initialization of
arrays of primitives in a constructor initialization list, as detailed
in this post:
http://groups.google.com/group/comp.lang.c++/msg/dab44a8b786b6a79

and in the reply by Dietmar Kuehl, in which he quotes the relevant
portion of the C++ Standard:
http://groups.google.com/group/comp.lang.c++/msg/71a9fecc4f5d7d57

I tried to file a bug report at
http://lab.msdn.microsoft.com/productfeedback/default.aspx
but they only let you submit bug reports for VC++ 2005, which I am
unable to install at the moment, and I am not sure if the bug is present
in the newer version.

Can anybody confirm if this bug is present in the newer version?


This is the output when compiled with VC2005

During compilation:
warning C4351: new behavior: elements of array 'Init::ai' will be default
initialized
warning C4351: new behavior: elements of array 'Init::bi' will be default
initialized

When running

UnInit:
ai = {-858993460, -858993460, -858993460, -858993460, }
bi = {204, 204, 204, 204, }

Init:
ai = {0, 0, 0, 0, }
bi = {0, 0, 0, 0, }


--

Kind regards,
Bruno van Dooren
(e-mail address removed)
Remove only "_nos_pam"
 
M

Marcus Kwok

Bruno van Dooren said:
This is the output when compiled with VC2005

During compilation:
warning C4351: new behavior: elements of array 'Init::ai' will be default
initialized
warning C4351: new behavior: elements of array 'Init::bi' will be default
initialized

When running

UnInit:
ai = {-858993460, -858993460, -858993460, -858993460, ^H^H}
bi = {204, 204, 204, 204, ^H^H}

Init:
ai = {0, 0, 0, 0, ^H^H}
bi = {0, 0, 0, 0, ^H^H}

I see, so they fixed it in the new version. Thanks for checking this
for me, and I will not file a bug report.
 
P

Patrick Kowalzick

I found a bug in VC++ .NET 2003 regarding default initialization of
arrays of primitives in a constructor initialization list, as detailed
in this post:
http://groups.google.com/group/comp.lang.c++/msg/dab44a8b786b6a79

and in the reply by Dietmar Kuehl, in which he quotes the relevant
portion of the C++ Standard:
http://groups.google.com/group/comp.lang.c++/msg/71a9fecc4f5d7d57

Funny enough the following change works as expected:

struct Init_POD
{
int ai[Size];
bool bi[Size];
};

class Init {
Init_POD pods;
public:
Init() : pods() { }
friend std::blush:stream& operator<<(std::blush:stream& o, const Init& i);
};

std::blush:stream&
operator<<(std::blush:stream& o, const Init& in)
{
o << "Init:\n";
o << "ai = {";
std::copy(in.pods.ai, in.pods.ai + Size, std::blush:stream_iterator<int>(o,
", "));
o << "\b\b}\n";

o << "bi = {";
std::copy(in.pods.bi, in.pods.bi + Size, std::blush:stream_iterator<bool>(o,
", "));
o << "\b\b}";

return o;
}

Regards,
Patrick
 
M

Marcus Kwok

Patrick Kowalzick said:
I found a bug in VC++ .NET 2003 regarding default initialization of
arrays of primitives in a constructor initialization list, as detailed
in this post:
http://groups.google.com/group/comp.lang.c++/msg/dab44a8b786b6a79

and in the reply by Dietmar Kuehl, in which he quotes the relevant
portion of the C++ Standard:
http://groups.google.com/group/comp.lang.c++/msg/71a9fecc4f5d7d57

Funny enough the following change works as expected:

struct Init_POD
{
int ai[Size];
bool bi[Size];
};

class Init {
Init_POD pods;
public:
Init() : pods() { }
friend std::blush:stream& operator<<(std::blush:stream& o, const Init& i);
};

Hmm, that is interesting! Thanks.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top