<p dir="ltr"><br>
On 13 Oct 2014 01:06, "Pavel Morozkin" <<a href="mailto:pavel.morozkin@gmail.com">pavel.morozkin@gmail.com</a>> wrote:<br>
><br>
> On 13 October 2014 03:53, Richard Smith <<a href="mailto:richard@metafoo.co.uk">richard@metafoo.co.uk</a>> wrote:<br>
>><br>
>> On Sun, Oct 12, 2014 at 3:29 AM, Pavel Morozkin <<a href="mailto:pavel.morozkin@gmail.com">pavel.morozkin@gmail.com</a>> wrote:<br>
>>><br>
>>> Hello cfe-dev group,<br>
>>><br>
>>> Consider this template metaprogram:<br>
>>> template <unsigned N> struct fib { enum { value = fib<N-1>::value + fib<N-2>::value}; };<br>
>>> template <> struct fib<1> { enum { value = 1 }; };<br>
>>> template <> struct fib<0> { enum { value = 0 }; };<br>
>>><br>
>>> During compilation of 'fib<2>::value' (after finally getting memoized result of instantiation of struct fib<0>) Clang «instantiates the anonymous enum inside fib<0> and fib<1>» 129 times in sum.<br>
>><br>
>><br>
>> That sounds like a bug. How are you observing it?<br>
><br>
><br>
> I debugged the metaprogram with use of Metashell tool.</p>
<p dir="ltr">Possibly this is a bug in metashell? How does it get this information?</p>
<p dir="ltr">>>> In case, when we use 'constexpr static auto' instead of 'enum', no additional instantiations occurs. Why Clang performs additional instantiations in the first case?<br>
>>><br>
>>> Thank you,<br>
>>> Pavel<br>
>>><br>
>>> _______________________________________________<br>
>>> cfe-dev mailing list<br>
>>> <a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
>>> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
>>><br>
>><br>
><br>
</p>