Boost.Hana: Details

| Boost.Hana 1.0.0 Your standard library for metaprogramming |

Classes | Macros | Typedefs
Details

## Description

Implementation details. Do not rely on anything here, even if it is documented.

## Classes

struct | boost::hana::detail::any_of< Predicate, T >
| Returns whether the `Predicate` is satisfied by any of the `T...`. More...
struct | boost::hana::detail::array< T, Size >
| A minimal `std::array` with better `constexpr` support. More...
struct | boost::hana::detail::CanonicalConstant< T >
| Tag representing a canonical `Constant`. More...
struct | boost::hana::detail::create< T >
| Implementation of the generic `std::make_xxx` pattern for arbitrary `xxx`s. More...
struct | boost::hana::detail::decay< T, U >
| Equivalent to `std::decay`, except faster. More...
struct | boost::hana::detail::first_unsatisfied_index< Pred >
| Returns the index of the first element which does not satisfy `Pred`, or `sizeof...(Xs)` if no such element exists. More...
struct | boost::hana::detail::has_duplicates< T >
| Returns whether any of the `T`s are duplicate w.r.t. `hana::equal`. More...
struct | boost::hana::detail::index_if< Pred, Ts, typename >
| Returns the index of the first element of the `pack<>` that satisfies the predicate, or the size of the pack if there is no such element. More...
struct | boost::hana::detail::nested_by< Algorithm >
| Provides a `.by` static constexpr function object. More...
struct | boost::hana::detail::nested_than< Algorithm >
| Provides a `.than` static constexpr function object. More...
struct | boost::hana::detail::nested_to< Algorithm >
| Provides a `.to` static constexpr function object. More...
struct | boost::hana::detail::operators::adl<... >
| Enables ADL in the `hana::detail::operators` namespace. More...
struct | boost::hana::detail::std_common_type< T, U, typename >
| Equivalent to `std::common_type`, except it is SFINAE-friendly and does not support custom specializations. More...

## Macros

#define | BOOST_HANA_DISPATCH_IF(IMPL, ...) IMPL
| Dispatch to the given implementation method only when a condition is satisfied. More...
#define | BOOST_HANA_PP_NARG(...) BOOST_HANA_PP_NARG_IMPL(__VA_ARGS__, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,)
| Macro expanding to the number of arguments it is passed. More...
#define | BOOST_HANA_PP_CONCAT(x, y) BOOST_HANA_PP_CONCAT_PRIMITIVE(x, y)
| Expands to the concatenation of its two arguments.
#define | BOOST_HANA_PP_STRINGIZE(...) BOOST_HANA_PP_STRINGIZE_PRIMITIVE(__VA_ARGS__)
| Expands to the stringized version of its argument.
#define | BOOST_HANA_PP_BACK(...) BOOST_HANA_PP_BACK_IMPL(BOOST_HANA_PP_NARG(__VA_ARGS__), __VA_ARGS__)
| Expands to its last argument. More...
#define | BOOST_HANA_PP_DROP_BACK(...) BOOST_HANA_PP_DROP_BACK_IMPL(BOOST_HANA_PP_NARG(__VA_ARGS__), __VA_ARGS__)
| Expands to all of its arguments, except for the last one. More...
#define | BOOST_HANA_PP_FRONT(...) BOOST_HANA_PP_FRONT_IMPL(__VA_ARGS__, )
| Expands to its first argument.
#define | BOOST_HANA_PP_DROP_FRONT(e0, ...) __VA_ARGS__
| Expands to all of its arguments, except for the first one. More...

## Typedefs

template<template< typename... > class Concept, typename T , typename U >
using | boost::hana::detail::has_common_embedding = typename has_common_embedding_impl< Concept, T, U >::type
| Returns whether `T` and `U` both have an embedding into a common type. More...
template<template< typename... > class Concept, typename T , typename U >
using | boost::hana::detail::has_nontrivial_common_embedding = typename has_nontrivial_common_embedding_impl< Concept, T, U >::type
| Returns whether `T` and `U` are distinct and both have an embedding into a common type. More...

## Macro Definition Documentation

#define BOOST_HANA_DISPATCH_IF | ( |  | IMPL,
|  |  | ...
| ) |  | IMPL

`#include <boost/hana/detail/dispatch_if.hpp>`

Dispatch to the given implementation method only when a condition is satisfied.

If the condition is satisfied, this macro is equivalent to the type `IMPL`. Otherwise, it is equivalent to a type with a deleted static function named `apply`. When a tag-dispatching error happens, the condition should be false and the deleted static function `apply` will prevent the compiler from generating too much garbage.

Note
  When `BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS` is defined, the condition is always ignored and this macro expands to the implementation only.

Remarks
  This must be implemented as a macro, because we don't want the condition to be evaluated at all when `BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS` is defined.

#define BOOST_HANA_PP_NARG | ( |  | ... | ) | BOOST_HANA_PP_NARG_IMPL(__VA_ARGS__, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,)

`#include <boost/hana/detail/preprocessor.hpp>`

Macro expanding to the number of arguments it is passed.

Specifically, `BOOST_HANA_PP_NARG(x1, ..., xn)` expands to `n`. It is undefined behavior if `n > 64` or if `n == 0`.

#define BOOST_HANA_PP_BACK | ( |  | ... | ) | BOOST_HANA_PP_BACK_IMPL(BOOST_HANA_PP_NARG(__VA_ARGS__), __VA_ARGS__)

`#include <boost/hana/detail/preprocessor.hpp>`

Expands to its last argument.

This macro can be passed up to 20 arguments.

#define BOOST_HANA_PP_DROP_BACK | ( |  | ... | ) | BOOST_HANA_PP_DROP_BACK_IMPL(BOOST_HANA_PP_NARG(__VA_ARGS__), __VA_ARGS__)

`#include <boost/hana/detail/preprocessor.hpp>`

Expands to all of its arguments, except for the last one.

This macro can be given up to 20 arguments.

#define BOOST_HANA_PP_DROP_FRONT | ( |  | e0,
|  |  | ...
| ) |  | __VA_ARGS__

`#include <boost/hana/detail/preprocessor.hpp>`

Expands to all of its arguments, except for the first one.

This macro may not be called with less than 2 arguments.

## Typedef Documentation

template<template< typename... > class Concept, typename T , typename U >

using boost::hana::detail::has_common_embedding = typedef typename has_common_embedding_impl<Concept, T, U>::type

`#include <boost/hana/detail/has_common_embedding.hpp>`

Returns whether `T` and `U` both have an embedding into a common type.

If `T` and `U` do not have a common-type, this metafunction returns false.

template<template< typename... > class Concept, typename T , typename U >

using boost::hana::detail::has_nontrivial_common_embedding = typedef typename has_nontrivial_common_embedding_impl<Concept, T, U>::type

`#include <boost/hana/detail/has_common_embedding.hpp>`

Returns whether `T` and `U` are distinct and both have an embedding into a common type.

If `T` and `U` do not have a common-type, this metafunction returns false.