From: Richard Smith Date: Wed, 17 Dec 2014 19:24:30 +0000 (+0000) Subject: Support constant evaluation for member calls on std::initializer_list X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8e75e54f9d440b03cce34b3aecee4fd3ebd24ad1;p=clang 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 --- 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 {