File tree Expand file tree Collapse file tree 3 files changed +32
-2
lines changed Expand file tree Collapse file tree 3 files changed +32
-2
lines changed Original file line number Diff line number Diff line change @@ -408,8 +408,15 @@ class Sema;
408408 }
409409
410410 bool isPerfect (const ASTContext &C) const {
411- return isIdentityConversion () &&
412- (!ReferenceBinding || C.hasSameType (getFromType (), getToType (2 )));
411+ if (!isIdentityConversion ())
412+ return false ;
413+ if (!ReferenceBinding)
414+ return true ;
415+ if (!C.hasSameType (getFromType (), getToType (2 )))
416+ return false ;
417+ if (BindsToRvalue && IsLvalueReference)
418+ return false ;
419+ return true ;
413420 }
414421
415422 ImplicitConversionRank getRank () const ;
Original file line number Diff line number Diff line change @@ -11031,6 +11031,8 @@ void OverloadCandidateSet::AddDeferredMethodTemplateCandidate(
1103111031 bool SuppressUserConversions, bool PartialOverloading,
1103211032 OverloadCandidateParamOrder PO) {
1103311033
11034+ assert(!isa<CXXConstructorDecl>(MethodTmpl->getTemplatedDecl()));
11035+
1103411036 auto *C =
1103511037 allocateDeferredCandidate<DeferredMethodTemplateOverloadCandidate>();
1103611038
Original file line number Diff line number Diff line change @@ -128,6 +128,27 @@ struct Test {
128128static_assert (__is_constructible(S, Test));
129129}
130130
131+ namespace RefBinding {
132+
133+ template <typename > struct remove_reference ;
134+ template <typename _Tp> struct remove_reference <_Tp &> {
135+ using type = _Tp;
136+ };
137+ template <typename _Tp> remove_reference<_Tp>::type move (_Tp &&);
138+ template <typename _Head> struct _Head_base {
139+ _Head_base (_Head &__h) : _M_head_impl(__h) {}
140+ template <typename _UHead> _Head_base (_UHead &&);
141+ _Head _M_head_impl;
142+ };
143+
144+ template <typename _Elements> void forward_as_tuple (_Elements &&) {
145+ _Head_base<_Elements &&>(_Elements{});
146+ }
147+ struct StringRef {
148+ void operator [](const StringRef __k) { forward_as_tuple ((move)(__k)); }
149+ };
150+
151+ }
131152
132153namespace GH62096 {
133154template <typename T>
You can’t perform that action at this time.
0 commit comments