| Thread overview |
|---|
April 25, 2015 o!(const(T)) parameter. | ||||
|---|---|---|---|---|
| ||||
I want a function with parameter o!(const(Form)) to accept both o!(Form) and o!(immutable(Form))
Is there a way to do it?
import std.stdio;
import std.traits;
class Form
{
int number = 10;
}
struct o(T)
{
T data;
this(T data)
{
this.data = data;
}
o!(const(Unqual!(T))) constify() const
{
return o!(const(Unqual!(T)))(data);
}
alias constify this;
}
void hello(o!(const(Form)) frm)
{
writeln(frm.data.number);
writeln(typeof(frm.data).stringof);
}
void main()
{
writeln("This application works nicely");
auto frm = o!(Form) (new Form());
// auto ifrm = o!(immutable(Form)) (new immutable Form());
hello(frm);
// hello(ifrm);
}
| ||||
April 25, 2015 Re: o!(const(T)) parameter. | ||||
|---|---|---|---|---|
| ||||
Posted in reply to sclytrack | On Saturday, 25 April 2015 at 14:52:45 UTC, sclytrack wrote: > I want a function with parameter o!(const(Form)) to accept both o!(Form) and o!(immutable(Form)) > > Is there a way to do it? > > > > > > import std.stdio; > import std.traits; > > > class Form > { > int number = 10; > } > > struct o(T) > { > T data; > > this(T data) > { > this.data = data; > } > > o!(const(Unqual!(T))) constify() const > { > return o!(const(Unqual!(T)))(data); > } > > alias constify this; > } > > > void hello(o!(const(Form)) frm) > { > writeln(frm.data.number); > writeln(typeof(frm.data).stringof); > } > > void main() > { > writeln("This application works nicely"); > auto frm = o!(Form) (new Form()); > // auto ifrm = o!(immutable(Form)) (new immutable Form()); > > hello(frm); > // hello(ifrm); > } It works when you exclude the recursive alias this: static if(!is(T == const)) alias constify this; Your original program crashes the compiler, which is always a bug. I filed an issue: https://issues.dlang.org/show_bug.cgi?id=14499 | |||
April 25, 2015 Re: o!(const(T)) parameter. | ||||
|---|---|---|---|---|
| ||||
Posted in reply to anonymous |
>
> It works when you exclude the recursive alias this:
> static if(!is(T == const)) alias constify this;
>
> Your original program crashes the compiler, which is always a bug. I filed an issue:
> https://issues.dlang.org/show_bug.cgi?id=14499
Thank you, very much.
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply