Thread overview
D equivalent of C++ explicit
Aug 19, 2021
Tejas
Aug 19, 2021
Paul Backus
Aug 19, 2021
Tejas
Aug 19, 2021
Paul Backus
Aug 19, 2021
Tejas
Aug 20, 2021
evilrat
Aug 20, 2021
Tejas
August 19, 2021

As the topic says:

Is there an equivalent to C++'s explicit keyword in D?

August 19, 2021

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.

August 19, 2021

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: )

August 19, 2021

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:

struct S
{
    this(int n) {}
}

void example()
{
    auto a = S(123); // this calls the constructor
    S b = 456; // so does this
}
August 19, 2021

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:

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!

August 20, 2021

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

August 20, 2021

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