clang raises a warning (-Winjected-class-name) due to ambiguity between
a constructor name and a type within the non_copyable_reference code.
Since clang could not infer the correct type context, this commit uses
`#pragma clang diagnostic` to disable the specific warning in the
affected area of the code.
The `push` and `pop` pragmas ensure that the warning is disabled only
where needed, preventing it from affecting other parts of the codebase,
and allowing us to maintain clean and clear code without unnecessary
compiler warnings.
A static_assert enforces that CustomDeleter::deleter is indeed a type,
although interpreting it as a constructor would be non-sensical here.
Change-Id: Ic0aac06d7af4272438f6f3d0275f29dc57a32194
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
return;
}
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Winjected-class-name"
+ static_assert(std::is_class<typename CustomDeleter::deleter>::value,
+ "CustomDeleter must define a 'deleter' callable class.");
const typename CustomDeleter::deleter del;
+#pragma clang diagnostic pop
+
del(_value);
release();
}