www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - D equivalent of C++ explicit

reply Tejas <notrealemail gmail.com> writes:
As the topic says:

Is there an equivalent to C++'s `explicit` keyword in D?
Aug 19 2021
parent reply Paul Backus <snarwin gmail.com> writes:
On Thursday, 19 August 2021 at 17:38:14 UTC, Tejas wrote:
 As the topic says:

 Is there an equivalent to C++'s `explicit` keyword in D?
No, because all constructors are explicit in D.
Aug 19 2021
parent reply Tejas <notrealemail gmail.com> writes:
On Thursday, 19 August 2021 at 17:43:59 UTC, Paul Backus wrote:
 On Thursday, 19 August 2021 at 17:38:14 UTC, Tejas wrote:
 As the topic says:

 Is there an equivalent to C++'s `explicit` keyword in D?
No, because all constructors are explicit in D.
Oh... then I guess I'll have to manually insert the explicit casts where C++ is doing implicit casts when calling constructors(God help me D: )
Aug 19 2021
next sibling parent reply Paul Backus <snarwin gmail.com> writes:
On Thursday, 19 August 2021 at 18:04:58 UTC, Tejas wrote:
 On Thursday, 19 August 2021 at 17:43:59 UTC, Paul Backus wrote:
 On Thursday, 19 August 2021 at 17:38:14 UTC, Tejas wrote:
 As the topic says:

 Is there an equivalent to C++'s `explicit` keyword in D?
No, because all constructors are explicit in D.
Oh... then I guess I'll have to manually insert the explicit casts where C++ is doing implicit casts when calling constructors(God help me D: )
Worth noting that in the specific case of variable initialization, you do not have to write out the constructor call directly: ```d struct S { this(int n) {} } void example() { auto a = S(123); // this calls the constructor S b = 456; // so does this } ```
Aug 19 2021
parent Tejas <notrealemail gmail.com> writes:
On Thursday, 19 August 2021 at 18:11:20 UTC, Paul Backus wrote:
 On Thursday, 19 August 2021 at 18:04:58 UTC, Tejas wrote:
 On Thursday, 19 August 2021 at 17:43:59 UTC, Paul Backus wrote:
 On Thursday, 19 August 2021 at 17:38:14 UTC, Tejas wrote:
 As the topic says:

 Is there an equivalent to C++'s `explicit` keyword in D?
No, because all constructors are explicit in D.
Oh... then I guess I'll have to manually insert the explicit casts where C++ is doing implicit casts when calling constructors(God help me D: )
Worth noting that in the specific case of variable initialization, you do not have to write out the constructor call directly: ```d struct S { this(int n) {} } void example() { auto a = S(123); // this calls the constructor S b = 456; // so does this } ```
Yeah I know that `OpAssign` basically isn't invoked during initialization. ```S a = 5;``` Gets rewritten as: ``` S a(5);``` Thank you for your time!
Aug 19 2021
prev sibling parent reply evilrat <evilrat666 gmail.com> writes:
On Thursday, 19 August 2021 at 18:04:58 UTC, Tejas wrote:
 On Thursday, 19 August 2021 at 17:43:59 UTC, Paul Backus wrote:
 On Thursday, 19 August 2021 at 17:38:14 UTC, Tejas wrote:
 As the topic says:

 Is there an equivalent to C++'s `explicit` keyword in D?
No, because all constructors are explicit in D.
Oh... then I guess I'll have to manually insert the explicit casts where C++ is doing implicit casts when calling constructors(God help me D: )
You don't have to, here is a binding generator with code conversion, even if it produces junk you can just copy paste relevant code. https://github.com/Superbelko/ohmygentool
Aug 19 2021
parent Tejas <notrealemail gmail.com> writes:
On Friday, 20 August 2021 at 05:43:49 UTC, evilrat wrote:
 On Thursday, 19 August 2021 at 18:04:58 UTC, Tejas wrote:
 On Thursday, 19 August 2021 at 17:43:59 UTC, Paul Backus wrote:
 On Thursday, 19 August 2021 at 17:38:14 UTC, Tejas wrote:
 As the topic says:

 Is there an equivalent to C++'s `explicit` keyword in D?
No, because all constructors are explicit in D.
Oh... then I guess I'll have to manually insert the explicit casts where C++ is doing implicit casts when calling constructors(God help me D: )
You don't have to, here is a binding generator with code conversion, even if it produces junk you can just copy paste relevant code. https://github.com/Superbelko/ohmygentool
Thank you! I've definitely been keeping an eye on your project since you mentioned it the last time. Good to know I can use it for this purpose :D
Aug 20 2021