From 513955c487d622f5cf0a52ad0498bb52e85a9747 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. llvm-svn: 224449 --- clang/lib/AST/ExprConstant.cpp | 3 +++ clang/test/SemaCXX/constant-expression-cxx11.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index 59b8e98..3d7f2dc 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/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/clang/test/SemaCXX/constant-expression-cxx11.cpp b/clang/test/SemaCXX/constant-expression-cxx11.cpp index dbb1255..e684f09 100644 --- a/clang/test/SemaCXX/constant-expression-cxx11.cpp +++ b/clang/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.7.4