Download Latest Version Proxy 4.0.1 Release source code.tar.gz (108.5 kB)
Email in envelope

Get an email when there's a new version of Proxy

Home / 4.0.0
Name Modified Size InfoDownloads / 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_builder gains add_skill and moves feature toggles into pro::skills (format, wformat, rtti, as_view, as_weak, slim). [#285]
  • {fmt} integration via proxy_fmt.h with pro::skills::fmt_format and fmt_wformat (requires {fmt} >= 6.1; include <proxy/proxy.h> and {fmt} before proxy_fmt.h). [#287]

  • Core semantics and ergonomics

  • proxy::facade_type alias and stricter polymorphic ctor/assignment constraints (pointer-like only). [#278]
  • proxy_invoke now passes the proxy reference to indirect function pointers, enabling leaner call sequences around indirect calls; removed deprecated PRO_DEF_WEAK_DISPATCH (since 3.2.0).
  • Improved design contracts: removed access_proxy and proxiable_ptr_constraints; refined ProAccessible, ProBasicFacade, ProFacade, ProDispatch, and ProOverload requirements; accessing a null proxy is erroneous behavior; updated spec and tests. [#320, [#336]]
  • proxy_indirect_accessor is no longer copyable/movable to prevent misuse; added tests. [#335]
  • Introduced is_bitwise_trivially_relocatable and 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 return proxy& (like assignment operators). [#332]
  • weak_proxy supports 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_invoke adjustments 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 in pro::v4 inline 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; .ixx sources are shipped but export workflows vary by toolchain.
  • Builder and skills

  • basic_facade_builder::support(...) -> add_skill<...>(). Feature toggles are in pro::skills (e.g., pro::skills::rtti, ::as_view, ::as_weak, ::fmt_format).
  • New header proxy_fmt.h for {fmt} skills; include <proxy/proxy.h> and {fmt} first.

  • Removed and changed behaviors

  • PRO_DEF_WEAK_DISPATCH removed (deprecated since 3.2.0). Use standard dispatch patterns; weak fallbacks can call back into proxy.
  • Accessing a null proxy is erroneous behavior. Audit code paths that may dereference disengaged proxies.
  • proxy_indirect_accessor isn'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_relocatable guidance.

  • 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

Full changelog: https://github.com/microsoft/proxy/compare/3.4.0...4.0.0

Source: README.md, updated 2025-08-18