C++ Logo

sg12

Advanced search

Re: [ub] Type punning to avoid copying

From: Gabriel Dos Reis <gdr_at_[hidden]>
Date: Fri, 26 Jul 2013 11:23:22 -0500
Jeffrey Yasskin <jyasskin_at_[hidden]> writes:

| On Fri, Jul 26, 2013 at 9:10 AM, Gabriel Dos Reis <gdr_at_[hidden]> wrote:
| > Jeffrey Yasskin <jyasskin_at_[hidden]> writes:
| >
| > | On Fri, Jul 26, 2013 at 8:30 AM, Gabriel Dos Reis <gdr_at_[hidden]> wrote:
| > | > Ion Gaztañaga <igaztanaga_at_[hidden]> writes:
| > | >
| > | > [...]
| > | >
| > | > | ¿How can we tell the compiler that a memory buffer is really a different
| > | > | type?
| > | >
| > | > Invoke a constructor to turn the raw memory into an object of the
| > | > desired type.
| > |
| > | Can you point to the wording that explains the behavior in that case?
| >
| > I am not sure I understand your request. Ion wants to state a region of
| > storage is of a given type. The behavior after the contructor ran is
| > what you get after running a constructor -- see section 12.1.
|
| Yeah, sorry. I mean, if I write:
|
| float f = 3.2f;
| int* i = new(&f) int;
| use(*i);
|
| where does it say what the value of '*i' is? I'm expecting
| implementation-defined, but I don't know exactly where to look.
|
| Thanks,
| Jeffrey

The object at 'i' is constructed but not initialized, so its value is
indeterminate. See 5.3.4/15.

-- Gaby

Received on 2013-07-26 18:23:39