Я уже некоторое время занимаюсь разработкой программы с использованием Visual Studio 2017. В последнее время я установил расширение Clang Power Tool, чтобы проверить качество своего кода. Часть моей программы состоит в эмуляции операционных кодов процессора. Я создал урезанный пример ниже.
Следующий пример работает нормально:
class C{};
inline void andi(C& s);
int main()
{
std::cout << "Hello, world!\n";
}
Этот не работает:
class C{};
inline void and(C& s);
int main()
{
std::cout << "Hello, world!\n";
}
Я получаю эти ошибки на Clang 3.8.0 (я использую версию 9.0.1 в моей программе, и ошибки похожи):
source_file.cpp:9:18: error: expected ')'
inline void and(C& s);
^
source_file.cpp:9:16: note: to match this '('
inline void and(C& s);
^
source_file.cpp:9:13: error: cannot form a reference to 'void'
inline void and(C& s);
^
source_file.cpp:9:1: error: 'inline' can only appear on functions
inline void and(C& s);
Похоже, что функции названы в честь бинарных операций (например, и, а не или или и xor) вызвать неправильное поведение в компиляторе. При использовании компилятора Visual Studio ошибки не отображаются, и программа работает должным образом.
Могу ли я что-нибудь сделать, чтобы этого не произошло? Или это ошибка в Clang? Добавление NOLINT в строку не помогает, так как это вызывает компилятор ...
Вы можете проверить случай здесь: https://rextester.com/TXU19618
Спасибо!