import options
template p[T] = none(T)
discard p[int]
templat.nim(5,10)错误:表达式'无(int)'是类型的 '选项[system.int]'并且必须被丢弃
我认为在模板实例化之前编写discard
是一种合理的方式来完成编译器要求的事情,不是吗?现在它只是脾气暴躁。
import options
template p[T](): untyped = T.none
discard p[int]()
这构建。主要更改可能是untyped
返回类型(请注意,typed
也没有工作,使用相同的奇怪消息)。
最后一个问题,T.none
很好但不是none(T)
。我认为UFCS都应该是等价的。
答案 0 :(得分:3)
默认情况下,Nim会假设模板返回一个“语句列表”(Nim代码块,不代表任何值)。由于这必须是格式良好的块,因此必须正确处理或丢弃其中所有调用的返回值,因此您会看到错误。
要解决此问题,只需向模板添加返回值:
import options
template p[T]: auto = none(T) # notice that I added "auto" here!
discard p[int]