无法推断模板化ufcs函数的类型

时间:2015-11-14 21:34:51

标签: d

struct None{};
struct Some(T){
  T value;
}
Optional!T some(T)(T value){
  return Optional!T(Some!T(value));
}
bool isNone(T)(ref Optional!T optional){
  return optional.peek!None != null;
}
bool isSome(T)(ref Optional!T optional){
  return optional.peek!(Some!T) != null;
}
Optional!T none(T)(){
  return Optional!T(None());
}
alias Optional(T) = std.variant.Algebraic!(Some!(T),None);
void main()
{
  Optional!int si = none!int();
  writeln(isNone!int(si));
  writeln(isSome(si)); //cannot deduce function from argument types
}

为什么我必须使用显式类型调用isSomeisNone? D不应该能推断出类型吗?

我想这是因为Optional(T)只是一个类型别名?

1 个答案:

答案 0 :(得分:1)

我认为这是一个DMD错误,同样指向NG thread

一旦模板别名,模板参数扣除就会失败。