Version 2.2.1 - #140
Merged
Merged
Conversation
* feat & perf: add ADL swap() function. * style: adjust the format of trivially_move. * resolve review comments.
* fix: fix wrong `INTERFACE` bug in CMakeLists.txt. * ci: add Sanitizer. * fix: install libclang-rt-$v-dev for clang. * fix: remove -fsanitize=undefined in GCC to avoid bug. * docs: add comments for GCC bug.
* fix: freestanding. * docs: update `release_notes.md`. * test: add tests for freestanding. * fix: no link to fix bug in clang.
* refactor: construct ErasurePass directly with const ptr. * refactor: remove `const_cast` in operator(). * fix: avoid using double underscore `__` according to [lex.name]/4.1 . * style: simplify the operator(). * fix: GCC 16 ipa-cp workaround. * resolve review comments. * resolve review comments.
* fix: fix warning `-Wuninitialized`. * fix: fix bug in test. * docs: update `release_notes.md`. * resolve review comments.
… setup (#137) ## Summary Add [ngcpp/proxy](https://github.com/ngcpp/proxy) (a C++20 pointer-semantics based polymorphic wrapper) as a new comparison target across the runtime benchmarks, and refresh the benchmark build configuration and related docs/CI. ## Changes ### Benchmark (new proxy comparisons) - Add proxy (pro) to benchmark.hpp include and benchmark/CMakeLists.txt as a benchmark target. - Add pro cases to existing benchmark suites: - benchmark_lambda.cpp: scalar / trivial / call-trivial lambda calls. - benchmark_move_only_function.cpp: scalar, small-trivial, multi-trivial parameter forwarding. - benchmark_assignment.cpp: copy/move assignment for small-trivial, large-capture, stateless, function-pointer and same-type cases. - benchmark_create.cpp: capture-lambda and non-trivial-functor creation. - benchmark_std_op.cpp, benchmark_free_function.cpp: additional pro cases. - Vendor proxy v4 source under benchmark/runtime/proxy/. ### Benchmark config - Switch compile flags from -Os to -O2 (fixes the strange bug on MinGW). - Adjust BENCHMARK_TIMES to {1000, 1000000} and BENCHMARK_REPEAT to 15. - Require C++20 (proxy needs C++20; function2 still works). Fixes - Add a missing `volatile` in `MoveOnlyFunction.Params.SmallTrivial` ### Docs / CI - Update README.md benchmark results section , add references to P2721 (deprecating std::function) and P3086 (proxy). - Update `benchmark/README.md`, `test/README.md` for the new commands. - benchmark.yml: drop unused ninja-build install and use --parallel.
* resolve agent comments. * docs: add PR number to `release_notes.md`.
Kim-J-Smith
commented
Aug 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🔧 Fixed Bugs
throw_or_terminate()now usesstd::terminate()and thestd::functionoverload ofnot_empty()is skipped when__STDC_HOSTED__is not defined. (fix: freestanding. #132)gcc_ipa_cp_friendly_cast()so indirect calls viam_invokerare tracked correctly (see issue Whyebd::fnbehave differently when called twice? #133). (Refactoroperator(). #134)-Wuninitializedwarning by explicitly initializingBase_MemberVariablein the default/nullptr_t/functor constructors. (Fixed-Wuninitializedwarning. #136)MoveOnlyFunction.Params.SmallTrivial(wrongvolatile void*usage). ( benchmark: add proxy as a new comparison target and update benchmark setup #137)✨ New Features
proxycases added to all runtime benchmark suites (headers vendored inbenchmark/runtime/proxy/). ( benchmark: add proxy as a new comparison target and update benchmark setup #137)🛠️ Optimizations and Improvements
ErasurePassdirectly with const pointers, adding dedicated constructors for const/volatile-qualified erased pointers. (Refactoroperator(). #134)operator()by inlining the invoker call and dropping theinvoke()helper from the command tables and removing unnecessaryconst_cast. (Refactoroperator(). #134)-O2(was-Os) to avoid the strange bug in MinGW, and benchmark parameters were adjusted (BENCHMARK_TIMES {1000, 1000000},BENCHMARK_REPEAT 15). ( benchmark: add proxy as a new comparison target and update benchmark setup #137)-O2). ( benchmark: add proxy as a new comparison target and update benchmark setup #137)-fsanitize=addressand Clang tests build with-fsanitize=address,undefined. (Add sanitizer test. #130)DEBUGnow forces the debug diagnostics (assertions and terminate checks) to stay active even whenNDEBUGor__OPTIMIZE__is defined. (Fixed-Wuninitializedwarning. #136)[[msvc::intrinsic]]togcc_ipa_cp_friendly_cast()to help MSVC inline. (perf: add EMBED_DETAIL_MSVC_INTRINSIC for MSVC. #135)📌 Notes
proxydependency.