Implicit conversion by return
Jonathan M Davis
newsgroup.d at jmdavisprog.com
Wed Aug 8 10:31:05 UTC 2018
On Wednesday, August 8, 2018 2:15:16 AM MDT Hakan Aras via Digitalmars-d-
learn wrote:
> Given this:
>
> struct Num
> {
> this(int a) {}
> }
>
> Is there any reason why this works:
>
> Num n = 5;
>
> but this doesnt:
>
> Num funk()
> {
> return 5;
> }
>
>
> I understand that I can construct it explicitely, but that gets
> annoying quickly, especially with templates.
Num n = 5;
doesn't actually do an implict conversion. It's the same as doing
Num n = Num(5);
So, I guess that you could call it implicit construction, but regardless,
it's just a different syntax for calling the constructor. The only way to
create an implicit conversion with a user-defined type in D is to use alias
this, and that only provides a way to implicitly convert _from_ a
user-defined type, not to a type. So, having
Num funk()
{
return 5;
}
work is impossible in D, just like having something like
auto foo(Num n)
{
...
}
foo(5);
work is impossible. If you want to return an int and have it converted to a
Num, then you're going to need to explicitly construct a Num from the int.
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list