Metaprogramming Utilities

Utility Concepts

#include <dplx/cncr/concepts.hpp>
namespace dplx::cncr {}
template<typename T, typename ...Ts>
concept any_of

Fullfilled if \(\exists U \in Ts .\; T = U\) holds.

template<typename T, typename ...Ts>
concept none_of

Fullfilled if \(\forall U \in Ts .\; T \neq U\) holds.

Template Parameter Pack Utilities

#include <dplx/cncr/pack_utils.hpp>
namespace dplx::cncr {}
template<std::size_t N, typename ...Ts>
constexpr decltype(auto) nth_param(Ts&&... vs) noexcept
Returns:

the perfectly forwarded N th value from vs (zero indexed)

template<std::size_t N, typename ...Ts>
using nth_param_t

Selects the N th type from Ts (zero indexed).

template<std::size_t N, decltype(auto)... Vs>
constexpr auto nth_param_v

Selects the N th value from Vs (zero indexed).