Disable clang warning for injected class name ambiguity in non_copyable_reference
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 6 Sep 2024 21:18:21 +0000 (21:18 +0000)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Mon, 9 Sep 2024 14:16:32 +0000 (10:16 -0400)
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>
src/common/reference.hpp

index 7b1d0b8c15724e4e83094da3dacd591d4ccdbef9..15dac55b9aa381026779cf5e1303f1f964a5c6f5 100644 (file)
@@ -76,7 +76,13 @@ private:
                        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();
        }
This page took 0.026103 seconds and 4 git commands to generate.