31. decltype macro and template function annotation¶
The templates exposes collection of template-like routines for Daslang.
All functions and symbols are in “templates” module, use require to get access to it.
require daslib/templates
31.1. Function annotations¶
-
template
¶
This macro is used to remove unused (template) arguments from the instantiation of the generic function. When [template(x)] is specified, the argument x is removed from the function call, but the type of the instance remains. The call where the function is instanciated is adjusted as well. For example:
[template (a), sideeffects]
def boo ( x : int; a : auto(TT) ) // when boo(1,type<int>)
return "{x}_{typeinfo(typename type<TT>)}"
...
boo(1,type<int>) // will be replaced with boo(1). instace will print "1_int"
31.2. Call macros¶
-
decltype
¶
This macro returns ast::TypeDecl for the corresponding expression. For example:
let x = 1
let y <- decltype(x) // [[TypeDecl() baseType==Type tInt, flags=TypeDeclFlags constant | TypeDeclFlags ref]]
-
decltype_noref
¶
This macro returns TypeDecl for the corresponding expression, minus the ref (&) portion.