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 _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
