//----
auto S()
{
  static struct Result
  {
    this(int, int){}
    inout(Result) get() inout
    {
        return this;
    }
  }
  return Result(1, 2);
}

void main()
{
  auto a = S();
  auto b = a.get();
  a = b; //Check proper operation
  alias typeof(a) A;
  alias typeof(b) B;
  writeln("Typeof A: ", A.stringof);
  writeln("Typeof B: ", B.stringof);
  assert(is(A == B));
}
//----
Typeof A: Result
Typeof B: Result
core.exception.AssertError@main(26): Assertion failure
//----

I'm investigating a problem, where I call a function whose return type is "inout(Return)", from a voldemort instance. The problem is that, apparently, the static return type of that call, which is "Result", fails the "is" test vs "Result"?

Anyways, the problem goes away if I declare Result as global, or if I declare get as a normal non-inout function.

I'm 95 % sure this is a bug, but "is" is a tricky function, so I'd like confirmation.

Anybody confirm this is a bug? I haven't found it in the issue list.

For info, I found this in phobos, inside iota, on the function opSlice:

//----
void main()
{
  auto a = iota(1, 2);
  auto b = a[];
  assert(is(typeof(a) == typeof(b)));
}
//----

Bug, right?

Reply via email to