[cfe-commits] r133237 - /cfe/trunk/lib/Sema/SemaTemplateDeduction.cpp

Douglas Gregor dgregor at apple.com
Fri Jun 17 07:42:06 PDT 2011


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

> On Fri, Jun 17, 2011 at 1:18 AM, Douglas Gregor <dgregor at apple.com> 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



More information about the cfe-commits mailing list