proxy

Proxy 3 Specifications

This document provides the API specifications for the C++ library Proxy (version 3). All the documented concepts, classes, and functions are defined in the namespace pro. Unless otherwise specified, all facilities are freestanding by default.

Since 3.4.0: To support side-by-side installation of multiple major releases, each version of Proxy is wrapped in an inline namespace named after its major number. In a translation unit that includes both Proxy 3 and Proxy 4, the APIs can be referenced explicitly as pro::v3::foo or pro::v4::foo The current release exports v3 as the inline (default) namespace, so unqualified names resolve to pro::v3.

Concepts

Name Description
facade Specifies that a type models a “facade”
inplace_proxiable_target Specifies that a value type can instantiate a proxy without allocation
proxiable_target
(since 3.3.0)
Specifies that a reference type can instantiate a proxy_view
proxiable Specifies that a pointer type can instantiate a proxy

Classes

Name Description
bad_proxy_cast
(since 3.2.0)
Exception thrown by the value-returning forms of proxy_cast on a type mismatch
basic_facade_builder
facade_builder
Provides capability to build a facade type at compile-time
constraint_level Defines the 4 constraint levels of a special member function
explicit_conversion_dispatch
conversion_dispatch

(since 3.2.0)
Dispatch type for explicit conversion expressions with accessibility
facade_aware_overload_t
(since 3.2.1)
Specifies a facade-aware overload template
implicit_conversion_dispatch
(since 3.2.0)
Dispatch type for implicit conversion expressions with accessibility
not_implemented
(since 3.2.0)
Exception thrown by weak_dispatch for the default implementation
operator_dispatch Dispatch type for operator expressions with accessibility
proxiable_ptr_constraints Defines the constraints of a pointer type to instantiate a proxy
proxy_indirect_accessor
(since 3.2.0)
Provides indirection accessibility for proxy
proxy_view
observer_facade

(since 3.2.0)
Non-owning proxy optimized for raw pointer types
proxy Wraps a pointer object matching specified facade
std::formatter<proxy_indirect_accessor>
(since 3.2.0)
Formatting support for proxy_indirect_accessor
weak_dispatch
(since 3.2.0)
Weak dispatch type with a default implementation that throws not_implemented
weak_proxy
weak_facade

(since 3.3.0)
proxy with weak ownership

Functions

Name Description
access_proxy Accesses a proxy object via an accessor
allocate_proxy_shared
(since 3.3.0)
Creates a proxy object with shared ownership using an allocator
allocate_proxy Creates a proxy object with an allocator
make_proxy_inplace Creates a proxy object with strong no-allocation guarantee
make_proxy_shared
(since 3.3.0)
Creates a proxy object with shared ownership
make_proxy_view
(since 3.3.0)
Creates a proxy_view object
make_proxy Creates a proxy object potentially with heap allocation
proxy_invoke Invokes a proxy with a specified convention
proxy_reflect Acquires reflection information of the underlying pointer type

Macros

Name Description
__msft_lib_proxy Feature test macro
PRO_DEF_FREE_AS_MEM_DISPATCH
(since 3.1.0)
Defines a dispatch type for free function call expressions with accessibility via a member function
PRO_DEF_FREE_DISPATCH Defines a dispatch type for free function call expressions with accessibility
PRO_DEF_MEM_DISPATCH Defines a dispatch type for member function call expressions with accessibility
PRO_DEF_WEAK_DISPATCH
(deprecated since 3.2.0)
Defines a weak dispatch type with a default implementation

Named Requirements

Name Description
ProAccessible Specifies that a type provides accessibility to proxy
ProBasicConvention Specifies that a type potentially models a “convention”
ProBasicFacade Specifies that a type potentially models a “facade” of proxy
ProBasicReflection
(since 3.1.0)
Specifies that a type potentially models a “reflection”
ProConvention Specifies that a type models a “convention”
ProDispatch Specifies that a type models a “dispatch”
ProFacade Specifies that a type models a “facade” of proxy
ProOverload Specifies that a type models an “overload”
ProReflection
(since 3.1.0)
Specifies that a type models a “reflection”