On Mon, 5 Oct 2015, Richard Sandiford wrote:
I do believe you still have some code growth since the inline dconst function always expands code that will initialize the constant. IMO that's not desirable.I don't disagree. I find dconst0 much easier to read than dconst<0> (). In some ways I was posting the patch to show how bad it could be :-) If we're prepared to pay the cost of unconditional load-time initialisation, we could have: template <int N> struct dconst_value { dconst_value () { ...set up value ...; } REAL_VALUE_TYPE value; }; template <int N> const REAL_VALUE_TYPE & dconst<T> (void) { static dconst_value<N> x; return x.value; }
Why are you calling this load-time initialization? As far as I know, such a static object is still initialized lazily (with all the overhead this implies). Did you mean to make value a static member of dconst_value?
-- Marc Glisse
