【发布时间】:2015-07-14 04:07:14
【问题描述】:
我正在使用函数模板void _createAttr(T)(args..., in T[]) 并在函数中使用static if(is(T == char)) 测试T 的类型。当我打电话时,
_createAttr!char(args...,"someString")
_createAttr(args...,"someString")
编译器从不抱怨。
我当然知道alias string = immutable(char)[]。因此,在第一次调用中,T 的类型和提供的参数不匹配,但 in 修饰符应该负责这一点。在第二种情况下,它应该推断出T = immutable(char)。据我了解,immutable(char) 和 char 是不同的类型,但编译器在第二种情况下通过了 is 测试。
编译器 (DMD) 在执行 is 测试时似乎忽略了字符串中字符的不可变性。
我在 dlang.org 或 The D Programming Language 书籍中找不到此行为的任何解释。
这是编译器错误吗?
【问题讨论】: