From 8e75e54f9d440b03cce34b3aecee4fd3ebd24ad1 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 17 Dec 2014 19:24:30 +0000 Subject: [PATCH] Support constant evaluation for member calls on std::initializer_list temporaries. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224449 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/ExprConstant.cpp | 3 +++ test/SemaCXX/constant-expression-cxx11.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/lib/AST/ExprConstant.cpp b/lib/AST/ExprConstant.cpp index 59b8e988bf..3d7f2dca7a 100644 --- a/lib/AST/ExprConstant.cpp +++ b/lib/AST/ExprConstant.cpp @@ -5474,6 +5474,9 @@ public: bool VisitCallExpr(const CallExpr *E) { return VisitConstructExpr(E); } + bool VisitCXXStdInitializerListExpr(const CXXStdInitializerListExpr *E) { + return VisitConstructExpr(E); + } }; } // end anonymous namespace diff --git a/test/SemaCXX/constant-expression-cxx11.cpp b/test/SemaCXX/constant-expression-cxx11.cpp index dbb1255ef1..e684f091ae 100644 --- a/test/SemaCXX/constant-expression-cxx11.cpp +++ b/test/SemaCXX/constant-expression-cxx11.cpp @@ -1712,6 +1712,9 @@ namespace InitializerList { return sum(ints.begin(), ints.end()); } static_assert(sum({1, 2, 3, 4, 5}) == 15, ""); + + static_assert(*std::initializer_list{1, 2, 3}.begin() == 1, ""); + static_assert(std::initializer_list{1, 2, 3}.begin()[2] == 3, ""); } namespace StmtExpr { -- 2.40.0