Iros
 
Loading...
Searching...
No Matches
di::Constexpr< val, T > Struct Template Reference

A wrapper for a constexpr value. More...

#include <di/meta/constexpr.h>

Inheritance diagram for di::Constexpr< val, T >:
[legend]

Public Types

using Value = T
 
using Type = Constexpr
 

Public Member Functions

constexpr operator Value () const
 
template<detail::ConstexprParam U>
constexpr auto operator= (U) const -> Constexpr<(val=U::value)>
 
template<auto v = val>
constexpr auto operator+ () const -> Constexpr<(+v)>
 
template<auto v = val>
constexpr auto operator- () const -> Constexpr<(-v)>
 
template<auto v = val>
constexpr auto operator~ () const -> Constexpr<(~v)>
 
template<auto v = val>
constexpr auto operator! () const -> Constexpr<(!v)>
 
template<auto v = val>
constexpr auto operator& () const -> Constexpr<(&v)>
 
template<auto v = val>
constexpr auto operator* () const -> Constexpr<(*v)>
 
template<detail::ConstexprParam... Vs, auto v = val>
constexpr auto operator() (Vs...) const -> Constexpr<(v(Vs::value...))>
 
template<detail::ConstexprParam... Vs, auto v = val>
constexpr auto operator[] (Vs...) const -> Constexpr<(v[Vs::value...])>
 

Static Public Attributes

static constexpr auto value = val
 

Friends

template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator+ (U, V) -> Constexpr<(U::value+V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator- (U, V) -> Constexpr<(U::value - V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator& (U, V) -> Constexpr<(U::value &V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator* (U, V) -> Constexpr<(U::value *V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator/ (U, V) -> Constexpr<(U::value/V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator% (U, V) -> Constexpr< U::value % V::value >
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator<< (U, V) -> Constexpr<(U::value<< V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator>> (U, V) -> Constexpr<(U::value > > V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator| (U, V) -> Constexpr<(U::value|V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator^ (U, V) -> Constexpr<(U::value ^ V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator&& (U, V) -> Constexpr<(U::value &&V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator|| (U, V) -> Constexpr<(U::value||V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator== (U, V) -> Constexpr<(U::value==V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator!= (U, V) -> Constexpr<(U::value !=V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator< (U, V) -> Constexpr<(U::value< V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator> (U, V) -> Constexpr<(U::value > V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator<= (U, V) -> Constexpr<(U::value<=V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator>= (U, V) -> Constexpr<(U::value >=V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator<=> (U, V) -> Constexpr<(U::value<=> V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator, (U, V) -> Constexpr<(U::value, V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator->* (U, V) -> Constexpr<(U::value-> *V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator+= (U, V) -> Constexpr<(U::value+=V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator-= (U, V) -> Constexpr<(U::value -=V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator*= (U, V) -> Constexpr<(U::value *=V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator/= (U, V) -> Constexpr<(U::value/=V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
constexpr friend auto operator%= (U, V) -> Constexpr<(U::value %=V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
auto operator&= (U, V) -> Constexpr<(U::value &=V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
auto operator|= (U, V) -> Constexpr<(U::value|=V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
auto operator^= (U, V) -> Constexpr<(U::value ^=V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
auto operator<<= (U, V) -> Constexpr<(U::value<<=V::value)>
 
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
auto operator>>= (U, V) -> Constexpr<(U::value > >=V::value)>
 

Detailed Description

A wrapper for a constexpr value.

Template Parameters
valThe value to wrap.
TThe type of the value.

This type defines a value which is lifted into the type-system, and so can be manipulated at compile time. This is especially useful for functions which take compile time values. This type is implicitly convertible to the wrapped value, and so can be used in place of it.

The helper alias meta::c_ is provided to make using this type more ergonomic, and since the type is able to be deduced, this works a lot better than something like std::integral_constant.

This type is taken from p2781.

See also
c_

Member Typedef Documentation

◆ Type

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
using di::meta::Constexpr< val, T >::Type = Constexpr

◆ Value

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
using di::meta::Constexpr< val, T >::Value = T

Member Function Documentation

◆ operator Value()

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
di::meta::Constexpr< val, T >::operator Value ( ) const
inlineconstexpr

◆ operator!()

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<auto v = val>
auto di::meta::Constexpr< val, T >::operator! ( ) const -> Constexpr<(!v)>
inlineconstexpr

◆ operator&()

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<auto v = val>
auto di::meta::Constexpr< val, T >::operator& ( ) const -> Constexpr<(&v)>
inlineconstexpr

◆ operator()()

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::ConstexprParam... Vs, auto v = val>
auto di::meta::Constexpr< val, T >::operator() ( Vs... ) const -> Constexpr<(v(Vs::value...))>
inlineconstexpr

◆ operator*()

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<auto v = val>
auto di::meta::Constexpr< val, T >::operator* ( ) const -> Constexpr<(*v)>
inlineconstexpr

◆ operator+()

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<auto v = val>
auto di::meta::Constexpr< val, T >::operator+ ( ) const -> Constexpr<(+v)>
inlineconstexpr

◆ operator-()

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<auto v = val>
auto di::meta::Constexpr< val, T >::operator- ( ) const -> Constexpr<(-v)>
inlineconstexpr

◆ operator=()

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::ConstexprParam U>
auto di::meta::Constexpr< val, T >::operator= ( U ) const -> Constexpr<(val = U::value)>
inlineconstexpr

◆ operator[]()

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::ConstexprParam... Vs, auto v = val>
auto di::meta::Constexpr< val, T >::operator[] ( Vs... ) const -> Constexpr<(v[Vs::value...])>
inlineconstexpr

◆ operator~()

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<auto v = val>
auto di::meta::Constexpr< val, T >::operator~ ( ) const -> Constexpr<(~v)>
inlineconstexpr

Friends And Related Symbol Documentation

◆ operator!=

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator!= ( U ,
V  ) -> Constexpr<(U::value != V::value)>
friend

◆ operator%

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator% ( U ,
V  ) -> Constexpr<U::value % V::value>
friend

◆ operator%=

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator%= ( U ,
V  ) -> Constexpr<(U::value %= V::value)>
friend

◆ operator&

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator& ( U ,
V  ) -> Constexpr<(U::value & V::value)>
friend

◆ operator&&

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator&& ( U ,
V  ) -> Constexpr<(U::value && V::value)>
friend

◆ operator&=

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
auto operator&= ( U ,
V  ) -> Constexpr<(U::value &= V::value)>
friend

◆ operator*

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator* ( U ,
V  ) -> Constexpr<(U::value * V::value)>
friend

◆ operator*=

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator*= ( U ,
V  ) -> Constexpr<(U::value *= V::value)>
friend

◆ operator+

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator+ ( U ,
V  ) -> Constexpr<(U::value + V::value)>
friend

◆ operator+=

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator+= ( U ,
V  ) -> Constexpr<(U::value += V::value)>
friend

◆ operator,

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator, ( U ,
V  ) -> Constexpr<(U::value, V::value)>
friend

◆ operator-

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator- ( U ,
V  ) -> Constexpr<(U::value - V::value)>
friend

◆ operator-=

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator-= ( U ,
V  ) -> Constexpr<(U::value -= V::value)>
friend

◆ operator->*

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator->* ( U ,
V  ) -> Constexpr<(U::value->*V::value)>
friend

◆ operator/

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator/ ( U ,
V  ) -> Constexpr<(U::value / V::value)>
friend

◆ operator/=

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator/= ( U ,
V  ) -> Constexpr<(U::value /= V::value)>
friend

◆ operator<

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator< ( U ,
V  ) -> Constexpr<(U::value < V::value)>
friend

◆ operator<<

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator<< ( U ,
V  ) -> Constexpr<(U::value << V::value)>
friend

◆ operator<<=

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
auto operator<<= ( U ,
V  ) -> Constexpr<(U::value <<= V::value)>
friend

◆ operator<=

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator<= ( U ,
V  ) -> Constexpr<(U::value <= V::value)>
friend

◆ operator<=>

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator<=> ( U ,
V  ) -> Constexpr<(U::value <=> V::value)>
friend

◆ operator==

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator== ( U ,
V  ) -> Constexpr<(U::value == V::value)>
friend

◆ operator>

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator> ( U ,
V  ) -> Constexpr<(U::value > V::value)>
friend

◆ operator>=

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator>= ( U ,
V  ) -> Constexpr<(U::value >= V::value)>
friend

◆ operator>>

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator>> ( U ,
V  ) -> Constexpr<(U::value >> V::value)>
friend

◆ operator>>=

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
auto operator>>= ( U ,
V  ) -> Constexpr<(U::value >>= V::value)>
friend

◆ operator^

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator^ ( U ,
V  ) -> Constexpr<(U::value ^ V::value)>
friend

◆ operator^=

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
auto operator^= ( U ,
V  ) -> Constexpr<(U::value ^= V::value)>
friend

◆ operator|

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator| ( U ,
V  ) -> Constexpr<(U::value | V::value)>
friend

◆ operator|=

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
auto operator|= ( U ,
V  ) -> Constexpr<(U::value |= V::value)>
friend

◆ operator||

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
template<detail::LhsConstexprParam< Type > U, detail::ConstexprParam V>
friend auto operator|| ( U ,
V  ) -> Constexpr<(U::value || V::value)>
friend

Member Data Documentation

◆ value

template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
auto di::meta::Constexpr< val, T >::value = val
staticconstexpr

The documentation for this struct was generated from the following files: