про "unused variable"? Этого понятия нет в стандарте, но мануалы к разным компиляторам трактуют это по-разному. Я хочу однозначной трактовки, потому я выделил несколько простых правил:
1. Неиспользуемые аргументы функции неиспользуемые — варнинг.
2. Переменные, объявленные в скоупе — варнинг для тривиального конструктора.
3. Для ссылки вызывается тривиальный конструктор, но компилятор не понимает, что объект создаётся функцией, которая дёргает нетривиальные конструкторы — варнинг (https://stackoverflow.com/questions/7418567/how-does-scoped-lock-avoid-emitting-an-unused-variable-warning).
На самом деле на кейс 3 пофиг, меня остальное интересует.
Если задача поймать лок, которому забыли дать имя, помнится у фейсбука был чекер, который такое ловил. Но если я правильно помню в нем были забиты конкретные классы за которыми он следил и, например, бустовой реализации локов там не было. Некоторое время назад натыкался на вот такую штуку в tidy, но на практике не пробовал. Да, это немного другое и требует разметки, но идея любопытная.
На самом деле мне формальности нужно было устаканить, но как выяснилось, не всё так однозначно.
Обсуждают сегодня