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


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


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]]

This macro returns TypeDecl for the corresponding expression, minus the ref (&) portion.