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