| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| proxy-4.0.0.tgz | 2025-08-18 | 19.1 kB | |
| Proxy 4.0.0 -- Skills, semantics, and better codegen source code.tar.gz | 2025-08-18 | 105.9 kB | |
| Proxy 4.0.0 -- Skills, semantics, and better codegen source code.zip | 2025-08-18 | 177.1 kB | |
| README.md | 2025-08-18 | 9.7 kB | |
| Totals: 4 Items | 311.9 kB | 0 | |
Proxy 4 focuses on a composable skills API, refined core semantics for the basic building blocks, and leaner code generation. It remains header-only and keeps 3.x coexistence paths introduced in 3.4.0.
New: a refreshed documentation site at https://microsoft.github.io/proxy/ and out-of-the-box availability on Compiler Explorer. Proxy now also supports the Intel oneAPI C++ compilers in CI.
What's inside
- Skills and builder
basic_facade_buildergainsadd_skilland moves feature toggles intopro::skills(format,wformat,rtti,as_view,as_weak,slim). [#285]-
{fmt} integration via
proxy_fmt.hwithpro::skills::fmt_formatandfmt_wformat(requires {fmt} >= 6.1; include<proxy/proxy.h>and {fmt} beforeproxy_fmt.h). [#287] -
Core semantics and ergonomics
proxy::facade_typealias and stricter polymorphic ctor/assignment constraints (pointer-like only). [#278]proxy_invokenow passes the proxy reference to indirect function pointers, enabling leaner call sequences around indirect calls; removed deprecatedPRO_DEF_WEAK_DISPATCH(since 3.2.0).- Improved design contracts: removed
access_proxyandproxiable_ptr_constraints; refined ProAccessible, ProBasicFacade, ProFacade, ProDispatch, and ProOverload requirements; accessing a nullproxyis erroneous behavior; updated spec and tests. [#320, [#336]] proxy_indirect_accessoris no longer copyable/movable to prevent misuse; added tests. [#335]- Introduced
is_bitwise_trivially_relocatableand updated dispatch/pointer internals to support bitwise trivially relocatable but non-movable types. We did not adopt the C++26 "trivially relocatable" model; Proxy follows the "bitwise trivially relocatable" direction to preserve memcpy-based relocation semantics (see P3780R0). [#330] - Fixed prefix
++/--to returnproxy&(like assignment operators). [#332] -
weak_proxysupports upward conversion. [#286] -
C++20 modules
-
Introduced C++20 module interface files (
.ixx) and separated convenience macros to support modules. A huge thanks to @SidneyCogdill for leading this effort. See the modules support docs for usage caveats and current CMake module export limitations. [#293] -
Code generation
- Leaner indirect call paths via
proxy_invokeadjustments reduce surrounding instructions. [#280] -
Builds where
<format>is unavailable are supported; features that need formatting are conditional. [#289] -
Toolchain and CI
-
Clang upgraded to 20 in CI; fixed build with GCC trunk; added Intel oneAPI pipeline; updated NVHPC; improved libc++ compatibility. [#282, [#327], [#333]]
-
Docs and site
- New docs site (MkDocs) with dark theme and improved navigation. See the FAQ for major upgrade guidance. Extracted example code from docs; updated sample links. [#299, [#331], [#311], [#291], [#328]]
- clang-format applied and enforced in CI; code and macro cleanup for standard naming. [#309, [#314], [#283], [#316], [#317]]
Upgrading
Most users can update includes and CMake targets and rebuild. If you customized dispatches/skills or relied on old behaviors, see notes below.
- Headers and namespaces
-
Preferred include:
<proxy/proxy.h>. Versioned headers remain under<proxy/v4/>. Code lives inpro::v4inline namespace. -
CMake package/targets
-
New package/namespace:
msft_proxy4. Example:find_package(msft_proxy4 REQUIRED)target_link_libraries(your_target PRIVATE msft_proxy4::proxy)- For the module interface, see docs;
.ixxsources are shipped but export workflows vary by toolchain.
-
Builder and skills
basic_facade_builder::support(...)->add_skill<...>(). Feature toggles are inpro::skills(e.g.,pro::skills::rtti,::as_view,::as_weak,::fmt_format).-
New header
proxy_fmt.hfor {fmt} skills; include<proxy/proxy.h>and {fmt} first. -
Removed and changed behaviors
PRO_DEF_WEAK_DISPATCHremoved (deprecated since 3.2.0). Use standard dispatch patterns; weak fallbacks can call back intoproxy.- Accessing a null
proxyis erroneous behavior. Audit code paths that may dereference disengaged proxies. proxy_indirect_accessorisn't copyable/movable; avoid storing*p; consume it immediately.-
Relocatability: prefer pointer-like indirections if a type fails proxiable checks; see relocatability docs and
is_bitwise_trivially_relocatableguidance. -
Formatting availability
- If
<format>is not available on your toolchain, Proxy will still build; only format-dependent skills/features are disabled. Use {fmt} skills if desired.
Refer to the updated docs and FAQ for side-by-side 3.x/4.x migration in large codebases, module usage notes, and relocatability guidance.
Acknowledgments
-
What's Changed (selected PRs)
-
Fix typo in the spec of
weak_facadeby @mingxwa in https://github.com/microsoft/proxy/pull/275 - Remove
offsetofto eliminate undefined behavior by @mingxwa in https://github.com/microsoft/proxy/pull/276 - Improve semantics of
proxyby @mingxwa in https://github.com/microsoft/proxy/pull/278 - Improve
proxy_invokeby @mingxwa in https://github.com/microsoft/proxy/pull/280 - Upgrade Clang version in the CI pipeline by @mingxwa in https://github.com/microsoft/proxy/pull/282
- Code clean up by @mingxwa in https://github.com/microsoft/proxy/pull/283
- Refactor
basic_facade_builderby @mingxwa in https://github.com/microsoft/proxy/pull/285 weak_proxysupport upward conversion by @mingxwa in https://github.com/microsoft/proxy/pull/286- Support build environments where
<format>is not available by @mingxwa in https://github.com/microsoft/proxy/pull/289 - Add skills for {fmt} by @mingxwa in https://github.com/microsoft/proxy/pull/287
- Extract example code from docs by @mingxwa in https://github.com/microsoft/proxy/pull/291
- Separate macro definitions and add cppm files by @SidneyCogdill in https://github.com/microsoft/proxy/pull/293
- Project rename: Proxy -> Proxy 4 by @SidneyCogdill in https://github.com/microsoft/proxy/pull/302
- Make package name matches namespace name by @SidneyCogdill in https://github.com/microsoft/proxy/pull/307
- Apply clang-format by @mingxwa in https://github.com/microsoft/proxy/pull/309
- Revise documentation by @mingxwa in https://github.com/microsoft/proxy/pull/299
- Add FAQ for major version upgrade by @mingxwa in https://github.com/microsoft/proxy/pull/311
- Fix release pipeline by @mingxwa in https://github.com/microsoft/proxy/pull/313
- Apply clang-format to the whole repository by @mingxwa in https://github.com/microsoft/proxy/pull/314
- Code cleanup by @mingxwa in https://github.com/microsoft/proxy/pull/316
- Clean up macros by @mingxwa in https://github.com/microsoft/proxy/pull/317
- Improve design quality by @mingxwa in https://github.com/microsoft/proxy/pull/320
- Support trivial relocatability by @mingxwa in https://github.com/microsoft/proxy/pull/321
- Revise skills by @mingxwa in https://github.com/microsoft/proxy/pull/324
- Fix MSVC build in debug mode by @mingxwa in https://github.com/microsoft/proxy/pull/329
- Update sample code links by @mingxwa in https://github.com/microsoft/proxy/pull/328
- Fix build with GCC trunk by @mingxwa in https://github.com/microsoft/proxy/pull/327
- Support bitwise trivial relocatability by @mingxwa in https://github.com/microsoft/proxy/pull/330
- Allow dark theme on the website by @mingxwa in https://github.com/microsoft/proxy/pull/331
- Improve
proxy_indirect_accessorby @mingxwa in https://github.com/microsoft/proxy/pull/335 - Fix return type for prefix operator++ and operator-- by @mingxwa in https://github.com/microsoft/proxy/pull/332
- Code cleanup by @mingxwa in https://github.com/microsoft/proxy/pull/334
- Improve toolchain coverage by @mingxwa in https://github.com/microsoft/proxy/pull/333
- Revise the semantics of ProAccessible by @mingxwa in https://github.com/microsoft/proxy/pull/336
-
Fix release pipeline by @mingxwa in https://github.com/microsoft/proxy/pull/337
-
New Contributors
- @SidneyCogdill made their first contribution in [#293]
Full changelog: https://github.com/microsoft/proxy/compare/3.4.0...4.0.0