Thread overview
o!(const(T)) parameter.
Apr 25, 2015
sclytrack
Apr 25, 2015
anonymous
Apr 25, 2015
sclytrack
April 25, 2015
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
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
>
> 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.