How are extra copy constructor parameters used?

Rahul Sharma rahulsharmaindia3 at
Thu Dec 30 07:05:59 UTC 2021

On Thursday, 30 December 2021 at 01:04:10 UTC, Ali Çehreli wrote:
> The second item in the documentation mentions "any number of 
> default parameters" when describing copy constructor syntax:
> 1) I can't figure out how to use those extra parameters. For 
> example, I can't find a special function name to call 
> explicitly:
>   S.__cctor(a, 42);  // No go
> 2) Unlike the examples there, I think the parameter should most 
> usefully be defined as 'const' unless there is a special reason:
> struct S {
>   // const(S) instead of S:
>   this(ref const(S) that) {
>   }
> }
> Do you agree?
> Thank you,
> Ali


A copy constructor always takes one parameter, reference to the 
type for which it belongs, there maybe other parameters but they 
must have default values.

An copy constructor is called as an copying function and the 
purpose of the copy constructor is to create an object of a type 
by using an object of the same type as basis for creation of the 
new type.

The Standard specify's that the copy constructor be of the type:

T(const &T obj);
This basically allows creation of temporary objects during 
calling functions by value or returning objects of the type by 
This syntax facilitates creation of an new object as:

T obj1(obj2);      <--------- Direct Initialization
T obj1 = obj2;     <--------- Copy Initialization
If the additional arguments being passed to the copy constructor 
would not be mandated to have default values then the 
construction of objects using the above syntax would not be 
Hence the strict condition,
there maybe other parameters to a copy constructor but they must 
have default values.

More information about the Digitalmars-d-learn mailing list