return StmtVisitorTy::Visit(E->getSubExpr()) && Scope.destroy();
}
+ // Temporaries are registered when created, so we don't care about
+ // CXXBindTemporaryExpr.
+ bool VisitCXXBindTemporaryExpr(const CXXBindTemporaryExpr *E) {
+ return StmtVisitorTy::Visit(E->getSubExpr());
+ }
+
bool VisitCXXReinterpretCastExpr(const CXXReinterpretCastExpr *E) {
CCEDiag(E, diag::note_constexpr_invalid_cast) << 0;
return static_cast<Derived*>(this)->VisitCastExpr(E);
bool VisitCXXInheritedCtorInitExpr(const CXXInheritedCtorInitExpr *E);
bool VisitCXXConstructExpr(const CXXConstructExpr *E, QualType T);
bool VisitCXXStdInitializerListExpr(const CXXStdInitializerListExpr *E);
-
- // Temporaries are registered when created, so we don't care about
- // CXXBindTemporaryExpr.
- bool VisitCXXBindTemporaryExpr(const CXXBindTemporaryExpr *E) {
- return Visit(E->getSubExpr());
- }
-
bool VisitBinCmp(const BinaryOperator *E);
};
}
return true;
}
static_assert(run_dtors_on_array_filler());
+
+ // Ensure that we can handle temporary cleanups for array temporaries.
+ struct ArrElem { constexpr ~ArrElem() {} };
+ using Arr = ArrElem[3];
+ static_assert((Arr{}, true));
}
namespace dynamic_alloc {