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

Reply via email to