У меня есть синтаксическая ошибка с объявлениями cppcheck и using/typedef. У меня есть структура, содержащая
struct inferior
{
using visitor = int;
template <typename T>
bool operator()(const T &a, const T &b) const
{
return a < b;
}
};
int main() {
return 0;
}
когда я запускаю cppcheck file.cpp
вывод
[file.cpp:5]: (error) syntax error
без дальнейшего вывода.
Ошибка исчезла, если я удалю объявление using
.
Интересно, это нормальное поведение cppcheck
. объявление using
не используется напрямую. (Это сокращенный пример с переопределением using
int).
Некоторый контекст, если необходимо: в моем приложении using
определяет специализацию посетителя OnlyArithmetic
следующим образом: using visitor = OnlyArithmetic<inferior>
который фильтрует неарифметические типы с использованием методов метапрограммирования, затем я вызываю std::visit для inferior::visitor(). Я использовал этот трюк, чтобы не повторять часть фильтрации для всех необходимых мне структур (низших, высших, ...).
[EDIT] Использование cppcheck 1.88
--std=c++11
в командную строку, я не знаю, что cppcheck использует по умолчанию - person fdan   schedule 21.08.2019--std=c++11
, но поведение такое же. Я использовал cppcheck 1.88 (последняя доморощенная формула). Я собрал cppcheck из исходников (1.89), но с той же проблемой, но с немного большим объемом вывода. Затем я перешел на версию 1.76.1 (одна из их ветвей), и проблема исчезла. - person cppart   schedule 21.08.2019