https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93999
Bug ID: 93999
Summary: Maybe a misleading warning
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Keywords: diagnostic
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: marxin at gcc dot gnu.org
Target Milestone: ---
We may emit a misleading warning based on:
https://github.com/godotengine/godot/pull/36393
$ cat grid.ii
class A;
template <class T, class... P>
void call_with_variant_args_helper(void (T::*p_method)(), int p_args) {
A *p_instance;
(p_instance->*p_method)(P(p_args)...);
}
template <class T> void call_with_variant_args(void (T::*)()) {
call_with_variant_args_helper<A>;
}
template <class T> class CallableCustomMethodPointer {
struct {
void (T::*method)();
} data;
public:
virtual void m_fn1() { call_with_variant_args(data.method); }
CallableCustomMethodPointer(A *, void (T::*)()) {}
};
template <class T>
void create_custom_callable_function_pointer(A *p_instance, const char *,
void (T::*p_method)()) {
CallableCustomMethodPointer(p_instance, p_method);
}
class A {
void m_fn2();
A();
};
A::A() { create_custom_callable_function_pointer(this, "", &A::m_fn2); }
$ g++ grid.ii -c -Wunused-but-set-parameter -Werror -std=c++17 -fmax-errors=1
grid.ii: In instantiation of ‘void call_with_variant_args_helper(void (T::*)(),
int) [with T = A; P = {}]’:
grid.ii:8:3: required from ‘void call_with_variant_args(void (T::*)()) [with
T = A]’
grid.ii:16:48: required from ‘void CallableCustomMethodPointer<T>::m_fn1()
[with T = A]’
grid.ii:16:16: required from here
grid.ii:3:63: error: parameter ‘p_args’ set but not used
[-Werror=unused-but-set-parameter]
3 | void call_with_variant_args_helper(void (T::*p_method)(), int p_args) {
| ~~~~^~~~~~
cc1plus: all warnings being treated as errors