可变的自卸程序模板功能不符合范围

时间:2019-07-20 07:47:19

标签: d

我有一个方便使用的dump函数(从互联网复制,很可能是从https://forum.dlang.org/复制),用于调查变量。

我只是注意到它并不在所有情况下都遵守范围(请参阅下文)。为什么以及如何修复它以获得预期的结果?还是功能根本存在缺陷? dump在我学习D时非常有价值。

我在Linux上使用DMD64 D编译器v2.083.0。

使用-debug编译时的预期结果:

(immutable(int) x = 1)
(immutable(immutable(char)[]) x = A)
(immutable(double) x = 1.1)

但是得到了:

(immutable(int) x = 1)
(immutable(int) x = 1)
(immutable(double) x = 1.1)

代码:

void dump(alias variable)()
{
  import std.stdio : writefln;
  writefln("(%s %s = %s)",
           typeid(typeof(variable)),
           variable.stringof,
           variable);
}

void main()
{
  {
    immutable x = 1; debug dump!x;
  }

  {
    immutable x = "A"; debug dump!x;
  }

  {
    void f() { immutable x = 1.1; debug dump!x; }
    f();
  }
}

1 个答案:

答案 0 :(得分:2)

好像您遇到了此编译器错误:

https://issues.dlang.org/show_bug.cgi?id=13617

  

功能局部符号没有唯一的名称,并且与同级作用域中的符号冲突

从错误报告中导出的一个最小示例来说明问题:

bool isInt(alias x)() { return is(typeof(x) == int); }

void main() {
  { int   a; static assert(isInt!a); }
  { float a; static assert(isInt!a); } // passes unexpectly (compiler bug)
}

上面的代码即使第二个static assert也会错误地编译,