> @optional_tag(isPure!F, pure) int[] map(F)(F f, int[] data) { > int[] res; > foreach (x; data) > res ~= f(x); > return res; > } This may not suffice to correctly tell apart strong pure functions from weak pure ones... Bye, bearophile