[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