On Nov 15, 2008, at 8:27 PM, Zhongxing Xu 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.

On 234 we have:

  template <typename T>
inline void Add(const T& x) { FoldingSetTrait<T>::Profile(x, *this); }

maybe we just add partial specialization:

  template <typename const T>
inline void Add(const T& x) { FoldingSetTrait<T>::Profile(x, *this); }
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to