On Tue, Jun 26, 2012 at 9:54 AM, John McCall <[email protected]> wrote:
> On Jun 25, 2012, at 7:55 PM, Richard Smith wrote: > > On Mon, Jun 25, 2012 at 7:47 PM, Richard Trieu <[email protected]> wrote: > >> On Mon, Jun 25, 2012 at 2:09 PM, Richard Trieu <[email protected]> wrote: >> >>> On Sun, Jun 24, 2012 at 2:57 PM, Richard Smith <[email protected]>wrote: >>> >>>> Thanks, LGTM. >>>> >>>> >>>> Incidentally, for this example: >>>> >>>> >>>> template<typename ...T> struct S {}; >>>> template<typename T> using U = S<int, char, T>; >>>> template<typename T> using V = U<U<T>>; >>>> int f(S<int, char, U<const double>>); >>>> int k = f(V<double>()); >>>> >>>> I get: >>>> >>>> <stdin>:4:5: note: candidate function not viable: no known conversion >>>> from 'S<[2 >>>> * ...], *struct S<int, char, double>*>' to 'S<[2 * ...], *U<const >>>> double>*>' for 1st argument; >>>> >>>> where I would have preferred: >>>> >>>> <stdin>:4:5: note: candidate function not viable: no known conversion >>>> from 'S<[2 >>>> * ...], S<[2 * ...], *double*>>' to 'S<[2 * ...], S<[2 * ...], * >>>> const >>>> double*>>' for 1st argument; >>>> >>>> Any idea what's going on there? >>>> >>>> >>>> Looking into it. It looks like Clang has 'struct S<int, char, double>' >>> as a SubstTemplateTypeParmType instead of a TemplateSpecializationType, >>> causing the template diffing to handle it as a type without going deeper. >>> >> >> Fixed. >> > > > + static const TemplateSpecializationType * > GetTemplateSpecializationType( > > Extra space after *. > > > + if (const SubstTemplateTypeParmType *STTPT = > > + Ty->getAs<SubstTemplateTypeParmType>()) > > + Ty = STTPT->getReplacementType(); > > Is this necessary? Since you next do this: > > > Not only is it unnecessary, but getAs<SugaredType>() is basically just an > expensive dyn_cast, because the canonical-type check will never succeed. > > John. > Fixed and committed at r159216.
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
