On Sun, Nov 16, 2008 at 12:27 PM, Zhongxing Xu <[EMAIL PROTECTED]>wrote:
>
>
> On Sun, Nov 16, 2008 at 11:28 AM, Ted Kremenek <[EMAIL PROTECTED]> wrote:
>
>>
>> On Nov 15, 2008, at 5:55 AM, Zhongxing Xu wrote:
>>
>>
>>> One side problem is that I cannot make the MemRegion* in the
>>> ImmutableList const. If I did that, I would get compile error, related to
>>> FoldingSet Profile() overloading.
>>>
>>> It seems that ImmutableList cannot take a const type as template
>>> parameter, otherwise the two Profile functions in the partial
>>> specialization of FoldingSetTrait would have the same signature.
>>> (FoldingSet.h:444, 447).
>>>
>>
>> Could we provide a partial specialization of FoldingSetTrait just for
>> ImmutableList? Or, does (something like) this work (i.e., add another
>> partial specialization for const types):
>>
>> template<typename const T> struct FoldingSetTrait<const T*> {
>> static inline void Profile(const T* X, FoldingSetNodeID& ID) {
>> ID.AddPointer(X);
>> }
>> };
>>
>
> Yeah, this works! Thanks. Incidentally, do you think the old problem is
> caused by a g++ bug, because, at FoldingSet.h:234, the parameter for Add()
> already contains 'const', T should not contain 'const' when being
> instantiated.
>
I was wrong. That was not g++ bug.
The template argument const T& need a const type. But const MemRegion* is
not a const type,
but a non-const pointer to const MemRegion. So T must match the entire
'const MemRegion*'.
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits