Boost.Hana  1.5.0 Your standard library for metaprogramming
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 xxxs. 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 Ts are duplicate w.r.t. hana::equal. 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...

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...

struct  boost::hana::detail::type_at< n, T >
Classic MPL-style metafunction returning the nth element of a type parameter pack. 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_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_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...

#define BOOST_HANA_PP_NARG(...)   BOOST_HANA_PP_NARG_IMPL(__VA_ARGS__, 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_BACK(...)   BOOST_HANA_PP_BACK_IMPL(BOOST_HANA_PP_NARG(__VA_ARGS__), __VA_ARGS__)
Expands to its last argument.

#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.

## 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_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.

 #define BOOST_HANA_PP_NARG ( ... ) BOOST_HANA_PP_NARG_IMPL(__VA_ARGS__, 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/struct_macros.hpp>

Macro expanding to the number of arguments it is passed.

Specifically, BOOST_HANA_PP_NARG(x1, ..., xn) expands to n. It is an error to call this macro with 0 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::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::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.