On Dec 10, 2008, at 4:23 PM, Eli Friedman wrote: > On Wed, Dec 10, 2008 at 4:07 PM, Douglas Gregor <[EMAIL PROTECTED]> > wrote: >>> If you have a system that is strong enough to know that (+) is >>> commutative, >>> then nominal unification should be able to prove the equivalence of >>> >>> template<int I, int J> void f(int (&array)[J+I]); >>> template<int X, int Y> void f(int (&array)[X+Y]); >> >> Thankfully, determining that those two function templates are >> functionally equivalent but not equivalent (per C++ [temp.over.link] >> p7) is in the realm of "ill-formed, no diagnostic required." Of >> course, a "high quality implementation" would detect such errors... > > Also, we need to preserve the form of the original expression tree in > the canonical type: AFAIK, doing name mangling in a compatible way > requires it.
Right. Name mangling is based on the actual expression as written in the source code, except that we replace the names of template parameters with their index into the template parameter list. We'll likely do the same thing for canonical types, where the "canonical" version of a template parameter is just its position in the template parameter list. - Doug _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
