原文​ 无​​间接​​的​​不变​​表达式不转换为​​可变​​.

void main() {
const i = 42; // 常,所以T应为常.
foo(i);
}

void foo(T)(T value) {
T result;
++result; // 编译错误,但是否应工作?
}

我觉得它应可工作,因为"​​结果​​​"是​​局部​​​整数.
但不能推导它为​​​"int"​​​,否则会​​丢失​​​限定符,并且在​​进一步​​​模板​​推导​​​会出错.我认为是缺少​​Unqual​​.

这样:

void main() {
auto foo = const Foo("whatever");
bar(foo);
}

struct Foo {
char[] data;
}

void bar(T)(T value) {
T thing = value;
thing.data[0] = 'a';
}

你希望由于​​写入只读内存​​​,在编译时还是运行时出错?
很公平,但​​​该类型​​​具有​​间接性​​​.我"​​感觉​​​"对无​​间接​​​的基本类型等,应该可以,我知道会破坏​​推导模板类型​​​及​​重载函数​​​.
必须添加​​​类型系统​​​中的​​异常​​​,才能使其仅适用于​​基本类型​​​.对​​切片,指针,结构和类​​​等其他类型,它会变得​​很危险​​.