diff --git a/Documentation/coding-style.rst b/Documentation/coding-style.rst
index 9939c7b1e86d..bbc1f2fb18c6 100644
--- a/Documentation/coding-style.rst
+++ b/Documentation/coding-style.rst
@@ -86,22 +86,17 @@ headers, and with double quotes for other libcamera headers.
 C++ Specific Rules
 ------------------
 
-The code shall be implemented in C++03, extended with the following
-C++-11-specific features:
-
-* Initializer lists
-* Type inference (auto and decltype)
-  Type inference shall be used with caution, to avoid drifting towards an
-  untyped language.
-* Range-based for loop
-* Lambda functions
-* Explicit overrides and final
-* Null pointer constant
-* General-purpose smart pointers (std::unique_ptr), deprecating std::auto_ptr.
+The code shall be implemented in C++14, with the following caveats:
+
+* Type inference (auto and decltype) shall be used with caution, to avoid
+  drifting towards an untyped language.
+* The explicit, override and final specifiers are to be used where applicable.
+* General-purpose smart pointers (std::unique_ptr) deprecate std::auto_ptr.
   Smart pointers, as well as shared pointers and weak pointers, shall not be
   overused.
-* Variadic class and function templates
-* rvalue references, move constructor and move assignment
+* Classes are encouraged to define move constructors and assignment operators
+  where applicable, and generally make use of the features offered by rvalue
+  references.
 
 Object Ownership
 ~~~~~~~~~~~~~~~~
diff --git a/meson.build b/meson.build
index 634488589a46..37cf4d665f7b 100644
--- a/meson.build
+++ b/meson.build
@@ -4,7 +4,7 @@ project('libcamera', 'c', 'cpp',
     default_options : [
         'werror=true',
         'warning_level=2',
-        'cpp_std=c++11',
+        'cpp_std=c++14',
     ],
     license : 'LGPL 2.1+')
 
diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
index 74b2922004be..a8dd1645d3e8 100644
--- a/src/ipa/rkisp1/rkisp1.cpp
+++ b/src/ipa/rkisp1/rkisp1.cpp
@@ -104,7 +104,9 @@ void IPARkISP1::configure(const std::map<unsigned int, IPAStream> &streamConfig,
 void IPARkISP1::mapBuffers(const std::vector<IPABuffer> &buffers)
 {
 	for (const IPABuffer &buffer : buffers) {
-		auto elem = buffers_.emplace(buffer.id, buffer.planes);
+		auto elem = buffers_.emplace(std::piecewise_construct,
+					     std::forward_as_tuple(buffer.id),
+					     std::forward_as_tuple(buffer.planes));
 		const FrameBuffer &fb = elem.first->second;
 
 		/*
