Clang and LLVM are now using C++14 🥳

Hi C++ lovers,

Clang and LLVM are now using C++14, and it looks like all the bots are as happy as they ever get. We can therefore start removing workarounds for older toolchains, using C++14 constructs which ADT / Support used to provide, and using new C++14 constructs such as generic lambdas.

I’ve already committed a few modernizations (and have one more pending review), but would appreciate it if others jumped in. I see Jonas is already removing llvm::make_unique! There’s some FIXMEs too if anyone wants to FIXTHEM:

lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp: // FIXME: Use C++14 std::equal(it, it, it, it) variant once it’s available.
lldb/source/Symbol/ClangASTContext.cpp: // FIXME: In C++14 and later, we can just pass m2Type->param_type_end()
llvm/include/llvm/ADT/PointerUnion.h: // FIXME: In C++14, replace this with
llvm/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h: // FIXME: Use capture-init when we move to C++14.
llvm/include/llvm/ExecutionEngine/Orc/RPCSerialization.h: // FIXME: Move capture Serialize once we have C++14.
llvm/include/llvm/ExecutionEngine/Orc/RPCUtils.h: // FIXME: Move handler into wrapped handler once we have C++14.
compiler-rt/include/fuzzer/FuzzedDataProvider.h: // TODO(Dor1s): switch to static_assert once C++14 is allowed.
llvm/include/llvm/Object/ObjectFile.h: // TODO: constructors could be removed when C++14 would be adopted.

Thanks and happy 14’ing,


Thanks, JF, and everyone else who contributed to this!


This is great! Congratulations!