Ответ 1
Не действительно ответ на вопрос, почему это происходит, но в любом случае какое значение может иметь n
, но nullptr
?
Возвращая this->v == nullptr
, а аргумент unnamed удаляет предупреждение:
bool operator==(std::nullptr_t) const {
return this->v == nullptr;
}
EDIT:
Объявление n
в качестве ссылки на rvalue или в качестве ссылки на константу lalue также удаляет предупреждение:
bool operator==(std::nullptr_t&& n) const {
return this->v == n;
}
bool operator==(const std::nullptr_t& n) const {
return this->v == n;
}
EDIT2:
Больше способов отключить предупреждение о неиспользуемых переменных можно найти в этом вопросе (спасибо @ShafikYaghmour для указания его в комментариях). Приведенные выше примеры охватывают "неявные" способы.
Явные решения доступны, но IMHO выглядят менее согласованными, так как параметр эффективно используется. Протестированные явные решения включают:
bool operator==(std::nullptr_t n) const {
(void)n;
return this->v == n;
}
#define UNUSED(expr) do { (void)(expr); } while (0)
bool operator==(std::nullptr_t n) const {
UNUSED(n);
return this->v == n;
}
Не переносимое решение для GCC:
bool operator==(__attribute__((unused)) std::nullptr_t n) const {
return this->v == n;
}