diff --git a/cmake/cxx11.cmake b/cmake/cxx11.cmake index 2deba34edaa..d05ec20caec 100644 --- a/cmake/cxx11.cmake +++ b/cmake/cxx11.cmake @@ -3,6 +3,6 @@ macro(use_cxx11) # Boost.Math requires C++14 set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard to use") else() - set(CMAKE_CXX_STANDARD 11 CACHE STRING "C++ standard to use") + set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to use") endif() endmacro() diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index 0c0144c63ee..062fecb6fcd 100644 --- a/lib/cppcheck.cpp +++ b/lib/cppcheck.cpp @@ -871,7 +871,11 @@ std::size_t CppCheck::calculateHash(const Preprocessor& preprocessor, const std: unsigned int CppCheck::checkBuffer(const FileWithDetails &file, const std::string &cfgname, int fileIndex, const uint8_t* data, std::size_t size) { const auto f = [&file, data, size](std::vector& files, simplecpp::OutputList* outputList) { +#if defined(__cpp_lib_string_view) + return simplecpp::TokenList{std::string_view{reinterpret_cast(data), size}, files, file.spath(), outputList}; +#else return simplecpp::TokenList{data, size, files, file.spath(), outputList}; +#endif }; return checkInternal(file, cfgname, fileIndex, f); } diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index 37771f02dae..e65addcca59 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -331,7 +331,11 @@ bool TokenList::createTokensFromBuffer(const uint8_t* data, size_t size) bool TokenList::createTokensFromBufferInternal(const uint8_t* data, size_t size, const std::string& file0) { simplecpp::OutputList outputList; +#if defined(__cpp_lib_string_view) + simplecpp::TokenList tokens(std::string_view{reinterpret_cast(data), size}, mFiles, file0, &outputList); +#else simplecpp::TokenList tokens(data, size, mFiles, file0, &outputList); +#endif createTokens(std::move(tokens)); @@ -1850,7 +1854,12 @@ namespace { ~OnException() { #ifndef _MSC_VER - if (std::uncaught_exception()) +#if defined(__cpp_lib_uncaught_exceptions) + const bool b = std::uncaught_exceptions() > 0; +#else + const bool b = std::uncaught_exception(); +#endif + if (b) f(); #endif } diff --git a/test/helpers.cpp b/test/helpers.cpp index e3087966cda..7155d0d2813 100644 --- a/test/helpers.cpp +++ b/test/helpers.cpp @@ -113,7 +113,11 @@ ScopedFile::~ScopedFile() { void SimpleTokenizer2::preprocess(const char* code, std::size_t size, std::vector &files, const std::string& file0, Tokenizer& tokenizer, ErrorLogger& errorlogger) { +#if defined(__cpp_lib_string_view) + simplecpp::TokenList tokens1(std::string_view{code, size}, files, file0); +#else simplecpp::TokenList tokens1(code, size, files, file0); +#endif Preprocessor preprocessor(tokens1, tokenizer.getSettings(), errorlogger, Path::identify(tokens1.getFiles()[0], false)); simplecpp::TokenList tokens2 = preprocessor.preprocess("", files, true); diff --git a/test/testpreprocessor.cpp b/test/testpreprocessor.cpp index ada3a7e5c45..6a66ce3d14c 100644 --- a/test/testpreprocessor.cpp +++ b/test/testpreprocessor.cpp @@ -126,7 +126,11 @@ class TestPreprocessor : public TestFixture { simplecpp::OutputList outputList; std::vector files; +#if defined(__cpp_lib_string_view) + simplecpp::TokenList tokens(std::string_view{code, size}, files, Path::simplifyPath(filename), &outputList); +#else simplecpp::TokenList tokens(code, size, files, Path::simplifyPath(filename), &outputList); +#endif // TODO: we should be using the actual Preprocessor implementation PreprocessorTest preprocessor(tokens, settings, errorlogger, Path::identify(tokens.getFiles()[0], false)); if (inlineSuppression) @@ -373,8 +377,7 @@ class TestPreprocessor : public TestFixture { if (arg && std::strncmp(arg,"-U",2)==0) settings.userUndefs.insert(arg+2); std::vector files; - // TODO: this adds an empty filename - simplecpp::TokenList tokens(code,files); + simplecpp::TokenList tokens(code,files,"test.c"); Preprocessor preprocessor(tokens, settings, *this, Standards::Language::C); // TODO: do we need to consider #file? preprocessor.removeComments(); const std::set configs = preprocessor.getConfigs(); @@ -387,8 +390,7 @@ class TestPreprocessor : public TestFixture { template std::size_t getHash(const char (&code)[size]) { std::vector files; - // TODO: this adds an empty filename - simplecpp::TokenList tokens(code,files); + simplecpp::TokenList tokens(code,files,"test.c"); Preprocessor preprocessor(tokens, settingsDefault, *this, Standards::Language::C); // TODO: do we need to consider #file? preprocessor.removeComments(); return preprocessor.calculateHash("");