__traits(compiles...) does not call your function so it is not evaluate twice only once, so there is no need to use memoize
On Fri, Nov 23, 2018 at 11:35 AM John Chapman via Digitalmars-d-learn < digitalmars-d-learn@puremagic.com> wrote: > I'm doing a fair amount of repeatedly checking if a function > compiles with __traits(compiles...), executing the function if > so, erroring out if not, like this: > > static if (__traits(compiles, generateFunc1())) { > return generateFunc1(); > } static if (__traits(compiles, generateFunc2())) { > return generateFunc2(); > } else static assert(false); > > But it seems inefficient to have to evaluate those functions > twice, so I'd like to optimise this so if __traits(compiles...) > succeeds, the result is cached and then used when the function is > actually called. I wondered if using std.functional.memoize would > help? >