Skip to content

Alias template slim

Header: proxy.h
Module: proxy
Namespace: pro::inline v4::skills
Since: 4.0.0

template <class FB> using slim = typename FB::template restrict_layout<sizeof(void*), alignof(void*)>; 

The alias template slim modifies a specialization of basic_facade_builder by restricting memory layout to single-pointer-size.

Notes

Let F be a built facade type.

Example

#include <memory> #include <proxy/proxy.h> struct Default : pro::facade_builder::build {}; struct Slim : pro::facade_builder //  ::add_skill<pro::skills::slim> //  ::build {}; int main() {  static_assert(sizeof(pro::proxy<Default>) > sizeof(pro::proxy<Slim>));  static_assert(pro::proxiable<int*, Default>);  static_assert(pro::proxiable<std::unique_ptr<int>, Default>);  static_assert(pro::proxiable<std::shared_ptr<int>, Default>);  static_assert(pro::proxiable<int*, Slim>);  static_assert(pro::proxiable<std::unique_ptr<int>, Slim>);  // std::shared_ptr is too large for a slim facade  static_assert(!pro::proxiable<std::shared_ptr<int>, Slim>);  // pro::make_proxy_shared works with a slim facade  pro::proxy<Slim> p = pro::make_proxy_shared<Slim>(123); } 

See Also