On Jun 17, 2011, at 6:11 AM, Francois Pichet wrote:

> On Fri, Jun 17, 2011 at 1:18 AM, Douglas Gregor <[email protected]> wrote:
>> Author: dgregor
>> Date: Fri Jun 17 00:18:17 2011
>> New Revision: 133237
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=133237&view=rev
>> Log:
>> Factor the checking of the deduced argument type against the actual
>> argument type for C++ [temp.deduct.call]p4 out of
>> Sema::FinishTemplateArgumentDeduction(). No functionality change.
>> 
>> 
>> Modified:
>>    cfe/trunk/lib/Sema/SemaTemplateDeduction.cpp
>> 
>> Modified: cfe/trunk/lib/Sema/SemaTemplateDeduction.cpp
>> URL: 
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateDeduction.cpp?rev=133237&r1=133236&r2=133237&view=diff
>> ==============================================================================
>>  /// \brief Finish template argument deduction for a function template,
>>  /// checking the deduced template arguments for completeness and forming
>>  /// the function template specialization.
>> @@ -2487,85 +2569,14 @@
>>     //   is transformed as described above). [...]
>>     for (unsigned I = 0, N = OriginalCallArgs->size(); I != N; ++I) {
>>       OriginalCallArg OriginalArg = (*OriginalCallArgs)[I];
>> -      QualType A = OriginalArg.OriginalArgType;
>>       unsigned ParamIdx = OriginalArg.ArgIdx;
>> 
>>       if (ParamIdx >= Specialization->getNumParams())
>>         continue;
>> 
>>       QualType DeducedA = Specialization->getParamDecl(ParamIdx)->getType();
>> -      QualType OriginalParamType = OriginalArg.OriginalParamType;
>> -
>> -      // Check for type equality (top-level cv-qualifiers are ignored).
>> -      if (Context.hasSameUnqualifiedType(A, DeducedA))
>> -        continue;
>> -
>> -      // Strip off references on the argument types; they aren't needed for
>> -      // the following checks.
>> -      if (const ReferenceType *DeducedARef = 
>> DeducedA->getAs<ReferenceType>())
>> -        DeducedA = DeducedARef->getPointeeType();
>> -      if (const ReferenceType *ARef = A->getAs<ReferenceType>())
>> -        A = ARef->getPointeeType();
>> -
>> -      // C++ [temp.deduct.call]p4:
>> -      //   [...] However, there are three cases that allow a difference:
>> -      //     - If the original P is a reference type, the deduced A (i.e., 
>> the
>> -      //       type referred to by the reference) can be more cv-qualified 
>> than
>> -      //       the transformed A.
>> -      if (const ReferenceType *OriginalParamRef
>> -                                  = 
>> OriginalParamType->getAs<ReferenceType>()) {
>> -        // We don't want to keep the reference around any more.
>> -        OriginalParamType = OriginalParamRef->getPointeeType();
>> -
>> -        Qualifiers AQuals = A.getQualifiers();
>> -        Qualifiers DeducedAQuals = DeducedA.getQualifiers();
>> -        if (AQuals == DeducedAQuals) {
>> -          // Qualifiers match; there's nothing to do.
>> -        } else if (!DeducedAQuals.compatiblyIncludes(AQuals)) {
>> -          return Sema::TDK_SubstitutionFailure;
> 
> why not return true here?
> Otherwise it warns under MSVC with suspicious conversion to bool

Oops! It was a refactoro, fixed in r133257. Thanks!

        - Doug
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to