Loading...
Searching...
No Matches
customisation_point.hpp File Reference

Helper utilities for defining customisation point objects (CPOs). More...

`#include <utility>`
`#include <seqan3/core/platform.hpp>`
Include dependency graph for customisation_point.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

## Namespaces

namespace | seqan3
| The main SeqAn3 namespace.

## Macros

#define | SEQAN3_CPO_OVERLOAD(...)
| A macro that helps to define a seqan3::detail::customisation_point_object.
#define | SEQAN3_CPO_OVERLOAD_BODY(...)
| A macro helper for SEQAN3_CPO_OVERLOAD.

## Detailed Description

Helper utilities for defining customisation point objects (CPOs).

Author
  Hannes Hauswedell <hannes.hauswedell AT fu-berlin.de>

## Macro Definition Documentation

## SEQAN3_CPO_OVERLOAD

#define SEQAN3_CPO_OVERLOAD | ( |  | ... | ) |

Value:
cpo_overload(__VA_ARGS__) SEQAN3_CPO_OVERLOAD_BODY
SEQAN3_CPO_OVERLOAD_BODY
#define SEQAN3_CPO_OVERLOAD_BODY(...)
A macro helper for SEQAN3_CPO_OVERLOAD.
Definition customisation_point.hpp:61

A macro that helps to define a seqan3::detail::customisation_point_object.

DEV

Expands to a function definition with the name cpo_overload.

It puts the given expression via SEQAN3_CPO_OVERLOAD_BODY as a single return statement in the function body, the noexcept declaration and requires declaration.

template <typename range_t>
requires true // further constraints
static constexpr auto SEQAN3_CPO_OVERLOAD(seqan3::detail::priority_tag<1>, range_t && range)(
/*return*/ std::forward<range_t>(range).begin() /*;*/
);

expands to something similar to

template <typename range_t>
requires true // further constraints
static constexpr auto cpo_overload(seqan3::detail::priority_tag<1>, range_t && range)
noexcept(noexcept(std::forward<range_t>(range).begin()))
requires requires()
{
{std::forward<range_t>(range).begin()};
}
{
return std::forward<range_t>(range).begin();
}
std::forward
T forward(T... args)

## SEQAN3_CPO_OVERLOAD_BODY

#define SEQAN3_CPO_OVERLOAD_BODY | ( |  | ... | ) |

Value:
noexcept(auto) \
{ \
return __VA_ARGS__; \
}

A macro helper for SEQAN3_CPO_OVERLOAD.

DEV

Please note that in order to allow a semicolon at the end when using this macro, i.e.

SEQAN3_CPO_OVERLOAD_BODY
(
...
);

we need some expression at the end of the macro that can have a semicolon appended. We chose static_assert(true) for that reason.

Hide me