зеркало из https://github.com/microsoft/clang-1.git
Make delegating initializers use a similar codepath to base initializers in dependent contexts. PR12890.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@157136 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
2b309fb125
Коммит
d21016f0b6
|
@ -2234,6 +2234,16 @@ Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init,
|
||||||
if (DelegationInit.isInvalid())
|
if (DelegationInit.isInvalid())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
// If we are in a dependent context, template instantiation will
|
||||||
|
// perform this type-checking again. Just save the arguments that we
|
||||||
|
// received in a ParenListExpr.
|
||||||
|
// FIXME: This isn't quite ideal, since our ASTs don't capture all
|
||||||
|
// of the information that we have about the base
|
||||||
|
// initializer. However, deconstructing the ASTs is a dicey process,
|
||||||
|
// and this approach is far more likely to get the corner cases right.
|
||||||
|
if (CurContext->isDependentContext())
|
||||||
|
DelegationInit = Owned(Init);
|
||||||
|
|
||||||
return new (Context) CXXCtorInitializer(Context, TInfo, InitRange.getBegin(),
|
return new (Context) CXXCtorInitializer(Context, TInfo, InitRange.getBegin(),
|
||||||
DelegationInit.takeAs<Expr>(),
|
DelegationInit.takeAs<Expr>(),
|
||||||
InitRange.getEnd());
|
InitRange.getEnd());
|
||||||
|
|
|
@ -29,3 +29,21 @@ namespace PR10457 {
|
||||||
Foo f(1, 1);
|
Foo f(1, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace PR12890 {
|
||||||
|
class Document
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Document() = default;
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
explicit
|
||||||
|
Document(T&& t) : Document()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
void f()
|
||||||
|
{
|
||||||
|
Document d(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче