<div dir="ltr"><div>They initialise an S from another S... I'm not sure what you mean by "they do different things"?</div><br><div>I've been wondering, why do you need to detect that a constructor is a copy or move constructor? That concept seems like a big internal hack. Why do normal overload selection semantics fail to determine the proper selection?</div><div>It's not clear why it's useful or important that copy and move constructors are separate from all other constructors? They're not special; they just happen to accept a self-type as an init argument... the only reason I can think, is to identify the case where they're not present, and some copy/move code must by synthesised in lieu... what else hangs off that knowledge?<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, 11 Oct 2024 at 16:11, Walter Bright via Digitalmars-d <<a href="mailto:digitalmars-d@puremagic.com">digitalmars-d@puremagic.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 10/10/2024 11:57 AM, Richard (Rikki) Andrew Cattermole wrote:<br>
> For whatever reason, this feature just keeps giving me the nagging sensation <br>
> that something isn't right with the motivation.<br>
<br>
<br>
Something I overlooked. With the original plan,<br>
```<br>
this(ref S) // copy constructor<br>
this(S) // move constructor<br>
```<br>
<br>
Generally speaking, functions that are overloaded should do the same thing, just <br>
with different arguments. But the copy and move overloads do something quite <br>
different. This is difference is what has been causing me frustrating problems <br>
with implementing it.<br>
<br>
</blockquote></div>