<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, May 25, 2014 at 7:04 AM, Adam Strzelecki <span dir="ltr"><<a href="mailto:ono@java.pl" target="_blank">ono@java.pl</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="">> I think the most general thing to do would be to teach SemaInit that a reference can bind to an object with a different address space if the initialized entity is the first parameter of a trivial copy or move constructor or assignment, and to teach it to add a new cross-address-space-copy step when that happens.<br>

<br>
</div>One thing that bothers me is that reference is kind of constant pointer, so dropping address space qualifier sounds kind of weird.</blockquote><div><br></div><div>We wouldn't be dropping them; we'd insert an AST node representing "copy from this address space to that address space" as a special conversion before we bind the reference. But that's all just implementation details. The user model is approximately that, for each trivial copy or move operation, there's something like an overload set copying from each address space.</div>
<div><br></div><div>Though that would only solve the problem of copying *from* some custom address space to the default address space. For the other direction, you'd presumably need address-space-qualified member functions (in particular, assignment operators).</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">
> Separately, overload resolution should be taught that this is possible; the first standard conversion sequence in such a case should probably have conversion rank.<br>
<br>
</div>I am afraid this isn't trivial change anymore. Do you think we could resolve these address-space issues before final 3.5?</blockquote><div><br></div><div>Magic 8-ball says "ask again later" =)</div><div>
 </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">
> +        const RecordType *DestRecordType = DestType->getAs<RecordType>();<br>
> +        CXXRecordDecl *DestRecordDecl<br>
> +          = cast<CXXRecordDecl>(DestRecordType->getDecl());<br>
><br>
> This is just DestType->getAsCXXRecordDecl().<br>
<br>
</div>Thanks for a hint.<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Adam</font></span></blockquote></div><br></div></div>