Первое предупреждение говорит вам использовать атрибут nodiscard
:
[[nodiscard]] virtual RealtimeConfig realtimeConfig() const noexcept = 0;
, это выдаст предупреждение компилятора, если кто-то вызывает realtimeConfig
без использования возвращаемого значения.
Второе предупреждение - вещь личного стиля. Он просто говорит вам использовать конечные типы возврата:
virtual auto realtimeConfig() const noexcept -> RealtimeConfig = 0;
Это не имеет никаких преимуществ или недостатков.
const noexcept = 0;
на самом деле три разные вещи:
const
ограничивает функцию-член для использования const this
вместо this
. По сути, это означает, что вы не можете изменять члены вашего класса и вызывать только другие const
функции-члены. noexcept
- это гарантия того, что ваша функция не вызовет никаких исключений. Если это так, программа завершается. = 0
может использоваться только в сочетании с virtual
. Он объявляет чисто виртуальную функцию (другие языки называют их абстрактными функциями).
В целом (согласно вашему clang-tidy) ваше объявление должно выглядеть так:
[[nodiscard]] virtual auto realtimeConfig() const noexcept -> RealtimeConfig = 0;
При этом, это не так уж много «модернизации». [[nodiscard]]
, вероятно, полезен, но некоторые компиляторы просто игнорируют его, поскольку они не обязаны ничего делать. Ключевое слово nodiscard
имело бы гораздо больший смысл, но это не учитывается для стандартного atm.