Version: 2.7

I have problems with the C++17 __has_include() preprocessor statement:
https://en.cppreference.com/w/cpp/preprocessor/include

This statement appears in some gcc-11 system headers and in some own files.

It looks like cppcheck performs no further scanning if the __has_include()
statement appears in an included file.

Example code:

Foo.hpp
--------------------------------8<--------------------------------

ifndef FOO_HPP_

define FOO_HPP_

if __has_include()

include

endif

class Foo
{
public:
Foo();
~Foo() = default;
Foo(const Foo &other) = delete;
Foo(Foo &&other) = delete;
Foo& operator=(const Foo &other) = delete;
Foo& operator=(Foo &&other) = delete;
};

endif / FOO_HPP_ /

-------------------------------->8--------------------------------

Foo.cpp
--------------------------------8<--------------------------------

include "Foo.hpp"

Foo::Foo()
{

}

-------------------------------->8--------------------------------

cppcheck Foo.cpp

Checking Foo.cpp ...
Foo.hpp:11:0: error: failed to evaluate #if condition [preprocessorErrorDirective]

if __has_include()

^

regards
Christian


Christian
Eggers
Software Engineer

ARRI
Arnold & Richter Cine Technik GmbH & Co. Betriebs KG
Arriweg 17,
83071
Stephanskirchen
www.arri.com

+49 8036 3009-3118
CEggers@arri.de


Get all the latest information from www.arri.com, Facebook, Twitter, Instagram and YouTube.

Arnold & Richter Cine Technik GmbH & Co. Betriebs KG
Sitz: München - Registergericht: Amtsgericht München - Handelsregisternummer: HRA 57918
Persönlich haftender Gesellschafter: Arnold & Richter Cine Technik GmbH
Sitz: München - Registergericht: Amtsgericht München - Handelsregisternummer: HRB 54477
Geschäftsführer: Dr. Michael Neuhäuser; Stephan Schenk; Walter Trauninger; Markus Zeiler