diff --git a/cfg/std.cfg b/cfg/std.cfg
index 84cffb79828..fe43af1ec19 100644
--- a/cfg/std.cfg
+++ b/cfg/std.cfg
@@ -9009,6 +9009,16 @@ initializer list (7) string& replace (const_iterator i1, const_iterator i2, init
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/checkother.cpp b/lib/checkother.cpp
index e1728788ecb..df842260906 100644
--- a/lib/checkother.cpp
+++ b/lib/checkother.cpp
@@ -1513,6 +1513,8 @@ void CheckOther::commaSeparatedReturnError(const Token *tok)
static bool isLargeContainer(const Variable* var, const Settings& settings)
{
const ValueType* vt = var->valueType();
+ if (vt->container->startPattern == "std :: initializer_list <")
+ return false;
if (vt->container->size_templateArgNo < 0)
return true;
const std::size_t maxByValueSize = 2 * settings.platform.sizeof_pointer;
diff --git a/test/cfg/std.cpp b/test/cfg/std.cpp
index 455dbf7df7c..8a9976a94ae 100644
--- a/test/cfg/std.cpp
+++ b/test/cfg/std.cpp
@@ -5307,3 +5307,15 @@ void containerOutOfBounds_std_string(std::string &var) { // #11403
// TODO cppcheck-suppress containerOutOfBounds
var+= s5[3];
}
+
+int containerOutOfBounds_std_initializer_list_access(const std::vector& v) {
+ // cppcheck-suppress containerOutOfBounds
+ return v[2];
+}
+
+int containerOutOfBounds_std_initializer_list() { // #14340
+ std::initializer_list x{ 1, 2 };
+ // cppcheck-suppress derefInvalidIterator
+ int i = *x.end();
+ return i + containerOutOfBounds_std_initializer_list_access(x);
+}
\ No newline at end of file