On 05/20/14 15:48, Zach Laine wrote:
I've seen function template vs. metafunction template instantiations profiled before, and I did it myself a few years ago. Function templates have been slower in every profile I've seen. In my profilings, they were ~20% slower.
The linked article appears to get better results not by using constexpr alone, but by using it to do numeric computations that allow it to reduce template instantiations.
AFAICT, the number of template function instantiations in the linked article are the same as the number of template class instantiations. When I run the attached, 1st with: defined(CONSTEXPR) then with: !defined(COnSTEXPR) the same values appear in the: (yesno,recurs) output, indicating the same number of instantiations. Am I missing something? BTW, I've asked a similar question on the linked page.
When the instantiations are close to the same in number, constexpr is slower. In your attachment, it appears that you are iterating over types, and so constexpr and metafunction approaches should involve the same number of template instantiations.
Zach
On Tue, May 20, 2014 at 3:20 PM, Larry Evans
wrote: [snip]
According to:
http://cpptruths.blogspot.com/2011/07/want-speed-use-constexpr-meta.html
template function recursion *should* compile faster than template metafunction recursion. [snip]