Skip to content

Conversation

@firewave
Copy link
Collaborator

No description provided.

@firewave
Copy link
Collaborator Author

firewave commented Dec 13, 2025

This provides a cleaner callstack as a std::function object is never created.

Before:

#2 0x557f52ae1bb9 in CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0::operator()() const /home/user/CLionProjects/cppcheck/lib/cppcheck.cpp:1356:24 #3 0x557f52ae19fc in void std::__invoke_impl<void, CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0&>(std::__invoke_other, CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../include/c++/15.2.1/bits/invoke.h:63:14 #4 0x557f52ae18fc in std::enable_if<is_invocable_r_v<void, CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0&>, void>::type std::__invoke_r<void, CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0&>(CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../include/c++/15.2.1/bits/invoke.h:113:2 #5 0x557f52ae14f4 in std::_Function_handler<void (), CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0>::_M_invoke(std::_Any_data const&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../include/c++/15.2.1/bits/std_function.h:292:9 #6 0x557f521f2e4d in std::function<void ()>::operator()() const /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../include/c++/15.2.1/bits/std_function.h:593:9 #7 0x557f521c5e91 in Timer::run(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, ShowTime, TimerResultsIntf*, std::function<void ()> const&) /home/user/CLionProjects/cppcheck/lib/timer.h:96:9 #8 0x557f52aa643f in CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) /home/user/CLionProjects/cppcheck/lib/cppcheck.cpp:1355:13 

After:

#2 0x5590d11f66e9 in CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0::operator()() const /home/user/CLionProjects/cppcheck/lib/cppcheck.cpp:1356:24 #3 0x5590d11de5f1 in void Timer::run<CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, ShowTime, TimerResultsIntf*, CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)::$_0 const&) /home/user/CLionProjects/cppcheck/lib/timer.h:97:9 #4 0x5590d11bd84c in CppCheck::checkNormalTokens(Tokenizer const&, AnalyzerInformation*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) /home/user/CLionProjects/cppcheck/lib/cppcheck.cpp:1355:13 

I filed https://trac.cppcheck.net/ticket/14327 about suggesting this ourselves.

@firewave firewave changed the title timer.h: template-ized Timer::run() template-ized Timer::run() Dec 13, 2025
@danmar
Copy link
Owner

danmar commented Dec 15, 2025

The problem is you throw away type safety. Concepts should be used to get sensible compiler error output. I have no idea what concepts to use here.

@firewave
Copy link
Collaborator Author

The problem is you throw away type safety. Concepts should be used to get sensible compiler error output. I have no idea what concepts to use here.

That could be addressed by adding a REQUIRES but we are not doing that in other places. I might take a look at this later.

@firewave firewave merged commit f934fa3 into danmar:main Dec 15, 2025
55 checks passed
@firewave firewave deleted the timer-f branch December 15, 2025 11:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants