PlayRho  2.0.0
An interactive physics engine & library.
playrho::detail Namespace Reference

Classes

struct  AABB
 N-dimensional Axis Aligned Bounding Box. More...
 
class  Checked
 Class template for construction-time constraining a type's value. More...
 
struct  detector
 Detector class template. More...
 
struct  detector< Default, std::void_t< Op< Args... > >, Op, Args... >
 Detected class template specialized for successful detection. More...
 
struct  FiniteChecker
 Finite constrained value checker. More...
 
struct  has_underlying_type_member
 
struct  has_underlying_type_member< T, std::void_t< typename T::underlying_type > >
 
struct  HasFunctor
 Has-functor trait template fallback class. More...
 
struct  HasFunctor< Type, Return(Args...)>
 Has-functor trait template class. More...
 
class  IndexingNamedType
 An indexable, hashable, named "strong type" template class. More...
 
struct  is_narrowing_conversion
 Is narrowing conversion trait. More...
 
struct  is_narrowing_conversion_impl
 Is narrowing conversion implementation true trait. More...
 
struct  is_narrowing_conversion_impl< From, To, std::void_t< decltype(To{std::declval< From >()})> >
 Is narrowing conversion implementation false trait. More...
 
struct  IsAddable
 Template for determining if the given types are addable. More...
 
struct  IsAddable< T1, T2, std::void_t< decltype(T1{}+T2{})> >
 Template specializing for addable types. More...
 
struct  IsArithmetic
 Template for determining if the given type is an "arithmetic" type. More...
 
struct  IsArithmetic< T, std::void_t< decltype(T{}+T{}), decltype(T{} - T{}), decltype(T{} *T{}), decltype(T{}/T{})> >
 Template specialization for valid/acceptable "arithmetic" types. More...
 
struct  IsDivisable
 Template for determining if the given types are divisable. More...
 
struct  IsDivisable< T1, T2, std::void_t< decltype(T1{}/T2{})> >
 Template specializing for divisable types. More...
 
struct  IsEqualityComparable
 Template for determining if the given type is an equality comparable type. More...
 
struct  IsEqualityComparable< T1, T2, std::void_t< decltype(T1{}==T2{})> >
 Template specialization for equality comparable types. More...
 
struct  IsInequalityComparable
 Template for determining if the given type is an inequality comparable type. More...
 
struct  IsInequalityComparable< T1, T2, std::void_t< decltype(T1{} !=T2{})> >
 Template specialization for inequality comparable types. More...
 
struct  IsIterable
 Low-level implementation of the is-iterable default value trait. More...
 
struct  IsIterable< T, std::void_t< decltype(begin(std::declval< T >())), decltype(end(std::declval< T >())), decltype(++std::declval< decltype(begin(std::declval< T & >()))& >()), decltype(*begin(std::declval< T >()))> >
 Low-level implementation of the is-iterable true value trait. More...
 
struct  IsMatrix
 Trait class for checking if type is a matrix type. More...
 
struct  IsMatrix< Vector< Vector< T, N >, M > >
 Trait class specialization for checking if type is a matrix type. More...
 
struct  IsMultipliable
 Template for determining if the given types are multipliable. More...
 
struct  IsMultipliable< T1, T2, std::void_t< decltype(T1{} *T2{})> >
 Template specializing for multipliable types. More...
 
struct  IsReverseIterable
 Low-level implementation of the is-reverse-iterable default value trait. More...
 
struct  IsReverseIterable< T, std::void_t< decltype(rbegin(std::declval< T >())), decltype(rend(std::declval< T >())), decltype(++std::declval< decltype(rbegin(std::declval< T & >()))& >()), decltype(*rbegin(std::declval< T >()))> >
 Low-level implementation of the is-reverse-iterable true value trait. More...
 
struct  IsSquareMatrix
 Trait class for checking if type is a square matrix type. More...
 
struct  IsSquareMatrix< Vector< Vector< T, M >, M > >
 Trait class specialization for checking if type is a square matrix type. More...
 
struct  IsVector
 Trait class for checking if type is a Vector type. More...
 
struct  IsVector< Vector< T, N > >
 Trait class specialization for checking if type is a Vector type.. More...
 
struct  LengthIndices
 Length and vertex counter array of indices. More...
 
struct  MassData
 Mass data. More...
 
struct  NegativeChecker
 Negative constrained value checker. More...
 
struct  nonesuch
 None such type. More...
 
struct  NonNegativeChecker
 Non-negative constrained value checker. More...
 
struct  NonPositiveChecker
 Non-positive constrained value checker. More...
 
struct  NonZeroChecker
 Non-zero constrained value checker. More...
 
struct  NoOpChecker
 No-op value checker. More...
 
struct  PositiveChecker
 Positive constrained value checker. More...
 
struct  RayCastInput
 Ray-cast input data for N-dimensions. More...
 
struct  SeparationInfo
 Separation information. More...
 
struct  TypeInfo
 Type information. More...
 
struct  TypeInfo< playrho::d2::ChainShapeConf >
 Type info specialization for playrho::d2::ChainShapeConf. More...
 
struct  TypeInfo< playrho::d2::DiskShapeConf >
 Type info specialization for playrho::d2::DiskShapeConf. More...
 
struct  TypeInfo< playrho::d2::DistanceJointConf >
 Type info specialization for playrho::d2::DistanceJointConf. More...
 
struct  TypeInfo< playrho::d2::EdgeShapeConf >
 Type info specialization for playrho::d2::EdgeShapeConf. More...
 
struct  TypeInfo< playrho::d2::FrictionJointConf >
 Type info specialization for playrho::d2::FrictionJointConf. More...
 
struct  TypeInfo< playrho::d2::GearJointConf >
 Type info specialization for playrho::d2::GearJointConf. More...
 
struct  TypeInfo< playrho::d2::MotorJointConf >
 Type info specialization for playrho::d2::MotorJointConf. More...
 
struct  TypeInfo< playrho::d2::MultiShapeConf >
 Type info specialization for playrho::d2::MultiShapeConf. More...
 
struct  TypeInfo< playrho::d2::PolygonShapeConf >
 Type info specialization for playrho::d2::PolygonShapeConf. More...
 
struct  TypeInfo< playrho::d2::PrismaticJointConf >
 Type info specialization for playrho::d2::PrismaticJointConf. More...
 
struct  TypeInfo< playrho::d2::PulleyJointConf >
 Type info specialization for d2::PulleyJointConf. More...
 
struct  TypeInfo< playrho::d2::RevoluteJointConf >
 Type info specialization for d2::RevoluteJointConf. More...
 
struct  TypeInfo< playrho::d2::RopeJointConf >
 Type info specialization for d2::RopeJointConf. More...
 
struct  TypeInfo< playrho::d2::TargetJointConf >
 Type info specialization for d2::TargetJointConf. More...
 
struct  TypeInfo< playrho::d2::WeldJointConf >
 Type info specialization for d2::WeldJointConf. More...
 
struct  TypeInfo< playrho::d2::WheelJointConf >
 Type info specialization for d2::WheelJointConf. More...
 
struct  underlying_type
 Underlying-type template class. More...
 
struct  underlying_type< T, std::enable_if_t< has_underlying_type_member< T >::value > >
 Underlying-type template class for detail::IndexingNamedType types. More...
 
struct  underlying_type< T, std::enable_if_t< std::is_enum_v< T > > >
 Underlying-type class specialization for enum types. More...
 
struct  UnitIntervalChecker
 Unit-interval constrained value checker. More...
 
struct  UnitMagnitudeChecker
 Unit magnitude constrained value checker. More...
 
struct  Wider
 Wider data type obtainer. More...
 
struct  Wider< double >
 Specialization of the Wider trait for double. More...
 
struct  Wider< float >
 Specialization of the Wider trait for float. More...
 
struct  Wider< std::int16_t >
 Specialization of the Wider trait for signed 16-bit integers. More...
 
struct  Wider< std::int32_t >
 Specialization of the Wider trait for signed 32-bit integers. More...
 
struct  Wider< std::int8_t >
 Specialization of the Wider trait for signed 8-bit integers. More...
 
struct  Wider< std::uint16_t >
 Specialization of the Wider trait for unsigned 16-bit integers. More...
 
struct  Wider< std::uint32_t >
 Specialization of the Wider trait for unsigned 32-bit integers. More...
 
struct  Wider< std::uint8_t >
 Specialization of the Wider trait for unsigned 8-bit integers. More...
 
struct  ZeroToUnderOneChecker
 Right open unit-interval constrained value checker. More...
 

Typedefs

using acceleration = Real
 Acceleration quantity type.
 
using angular_acceleration = Real
 Angular acceleration quantity type.
 
using angular_momentum = Real
 Angular momemntum quantity type.
 
using angular_velocity = Real
 Angular velocity quantity type.
 
using area = Real
 Area quantity type.
 
template<class T >
using DefaultCheckedValue = Checked< T >
 Default checked value type. More...
 
using force = Real
 Force quantity type.
 
using frequency = Real
 Frequency quantity type.
 
template<class T >
using get_member_type = decltype(std::declval< T & >().get())
 Alias for getting the return type of a get() member function.
 
using inverse_mass = Real
 Inverse mass quantity type.
 
using inverse_moment_of_inertia = Real
 Inverse moment of inertia quantity type.
 
template<template< class... > class Op, class... Args>
using is_detected = typename detector< nonesuch, void, Op, Args... >::value_t
 Is-detected value type. More...
 
using length = Real
 Length quantity type.
 
using mass = Real
 Mass quantity type.
 
using moment_of_inertia = Real
 2nd momemnt of inertia quantity type.
 
using momentum = Real
 Linear momentum quantity type.
 
using plane_angle = Real
 Plane angle quantity type.
 
using second_moment_of_area = Real
 2nd moment of area quantity type.
 
using surface_density = Real
 Surface density quantity type.
 
using time = Real
 Time quantity type.
 
using torque = Real
 Torque quantity type.
 
using velocity = Real
 Velocity quantity type.
 

Functions

template<class ValueType , class Checker , bool NoExcept>
auto abs (const Checked< ValueType, Checker, NoExcept > &arg) -> decltype(Checked< ValueType, Checker, false >(abs(arg.get())))
 Computes the absolute value. More...
 
template<std::size_t N>
constexpr bool Contains (const AABB< N > &a, const AABB< N > &b) noexcept
 Checks whether the first AABB fully contains the second AABB. More...
 
template<std::size_t N>
constexpr AABB< N > & Fatten (AABB< N > &var, const NonNegative< Length > amount) noexcept
 Fattens an AABB by the given amount.
 
template<std::size_t N>
constexpr Vector< Length, N > GetCenter (const AABB< N > &aabb) noexcept
 Gets the center of the AABB.
 
template<std::size_t N>
constexpr Vector< Length, N > GetDimensions (const AABB< N > &aabb) noexcept
 Gets dimensions of the given AABB.
 
template<std::size_t N>
constexpr AABB< N > GetDisplacedAABB (AABB< N > aabb, const Vector< Length, N > displacement)
 Gets the AABB that the result of displacing the given AABB by the given displacement amount.
 
template<std::size_t N>
constexpr AABB< N > GetEnclosingAABB (AABB< N > a, const AABB< N > &b)
 Gets the AABB that minimally encloses the given AABBs.
 
template<std::size_t N>
constexpr Vector< Length, N > GetExtents (const AABB< N > &aabb) noexcept
 Gets the extents of the AABB (half-widths).
 
template<std::size_t N>
constexpr AABB< N > GetFattenedAABB (AABB< N > aabb, const Length amount)
 Gets the fattened AABB result.
 
template<std::size_t N>
constexpr AABB< N > GetIntersectingAABB (const AABB< N > &a, const AABB< N > &b) noexcept
 Gets the intersecting AABB of the two given AABBs'.
 
template<std::size_t N>
constexpr Vector< Length, N > GetLowerBound (const AABB< N > &aabb) noexcept
 Gets the lower bound.
 
template<std::size_t N>
constexpr AABB< N > GetMovedAABB (AABB< N > aabb, const Vector< Length, N > value) noexcept
 Gets the result of moving the given AABB by the given value.
 
template<typename T >
const char * GetNameForTypeInfo ()
 Gets a null-terminated byte string identifying this function. More...
 
template<std::size_t N>
constexpr Vector< Length, N > GetUpperBound (const AABB< N > &aabb) noexcept
 Gets the upper bound.
 
template<std::size_t N>
constexpr AABB< N > & Include (AABB< N > &var, const AABB< N > &val) noexcept
 Includes the second AABB into the first one. More...
 
template<std::size_t N>
constexpr AABB< N > & Include (AABB< N > &var, const Vector< Length, N > &value) noexcept
 Includes the given location into the given AABB.
 
template<class T >
constexpr auto IsFull (const T &arg) -> decltype(size(arg)==max_size(arg))
 Checks whether the given container is full.
 
template<class T >
constexpr auto max_size (const T &arg) -> decltype(arg.max_size())
 Gets the maximum size of the given container.
 
template<std::size_t N>
constexpr AABB< N > & Move (AABB< N > &var, const Vector< Length, N > value) noexcept
 Moves the given AABB by the given value.
 
template<class ValueType , class Checker , bool NoExcept>
auto nextafter (const Checked< ValueType, Checker, NoExcept > &from, const Checked< ValueType, Checker, NoExcept > &to) -> decltype(Checked< ValueType, Checker, false >(nextafter(from.get(), to.get())))
 Next after function. More...
 
template<std::size_t N>
constexpr bool operator!= (const AABB< N > &lhs, const AABB< N > &rhs) noexcept
 Gets whether the two AABB objects are not equal. More...
 
template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator!= (const Checked< LhsValueType, LhsChecker, LhsNoExcept > &lhs, const Checked< RhsValueType, RhsChecker, RhsNoExcept > &rhs) noexcept(noexcept(std::declval< LhsValueType >() !=std::declval< RhsValueType >())) -> decltype(LhsValueType(lhs) !=RhsValueType(rhs))
 Constrained value inequality operator for value types which support it. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator!= (const Checked< ValueType, Checker, NoExcept > &lhs, const Other &rhs) -> decltype(ValueType(lhs) !=rhs)
 Constrained value inequality operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator!= (const Other &lhs, const Checked< ValueType, Checker, NoExcept > &rhs) -> decltype(lhs !=ValueType(rhs))
 Constrained value inequality operator. More...
 
template<std::size_t N>
constexpr bool operator!= (MassData< N > lhs, MassData< N > rhs)
 Inequality operator for mass data.
 
template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator* (const Checked< LhsValueType, LhsChecker, LhsNoExcept > &lhs, const Checked< RhsValueType, RhsChecker, RhsNoExcept > &rhs) -> decltype(LhsValueType(lhs) *RhsValueType(rhs))
 Constrained value multiplication operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator* (const Checked< ValueType, Checker, NoExcept > &lhs, const Other &rhs) -> std::enable_if_t<!IsMultipliableV< Checked< ValueType, Checker, NoExcept >, Other >, decltype(ValueType() *Other())>
 Constrained value multiplication operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator* (const Other &lhs, const Checked< ValueType, Checker, NoExcept > &rhs) -> std::enable_if_t<!IsMultipliableV< Other, Checked< ValueType, Checker, NoExcept >>, decltype(Other() *ValueType())>
 Constrained value multiplication operator. More...
 
template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator+ (const Checked< LhsValueType, LhsChecker, LhsNoExcept > &lhs, const Checked< RhsValueType, RhsChecker, RhsNoExcept > &rhs) -> decltype(LhsValueType(lhs)+RhsValueType(rhs))
 Constrained value addition operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator+ (const Checked< ValueType, Checker, NoExcept > &lhs, const Other &rhs) -> decltype(ValueType(lhs)+rhs)
 Constrained value addition operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator+ (const Other &lhs, const Checked< ValueType, Checker, NoExcept > &rhs) -> decltype(lhs+ValueType(rhs))
 Constrained value addition operator. More...
 
template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator- (const Checked< LhsValueType, LhsChecker, LhsNoExcept > &lhs, const Checked< RhsValueType, RhsChecker, RhsNoExcept > &rhs) -> decltype(LhsValueType(lhs) - RhsValueType(rhs))
 Constrained value subtraction operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator- (const Checked< ValueType, Checker, NoExcept > &lhs, const Other &rhs) -> decltype(ValueType(lhs) - rhs)
 Constrained value subtraction operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator- (const Other &lhs, const Checked< ValueType, Checker, NoExcept > &rhs) -> decltype(lhs - ValueType(rhs))
 Constrained value subtraction operator. More...
 
template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator/ (const Checked< LhsValueType, LhsChecker, LhsNoExcept > &lhs, const Checked< RhsValueType, RhsChecker, RhsNoExcept > &rhs) -> decltype(LhsValueType(lhs)/RhsValueType(rhs))
 Constrained value division operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator/ (const Checked< ValueType, Checker, NoExcept > &lhs, const Other &rhs) -> decltype(ValueType(lhs)/rhs)
 Constrained value division operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator/ (const Other &lhs, const Checked< ValueType, Checker, NoExcept > &rhs) -> decltype(lhs/ValueType(rhs))
 Constrained value division operator. More...
 
template<std::size_t N>
bool operator< (const AABB< N > &lhs, const AABB< N > &rhs) noexcept
 Less-than operator.
 
template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator< (const Checked< LhsValueType, LhsChecker, LhsNoExcept > &lhs, const Checked< RhsValueType, RhsChecker, RhsNoExcept > &rhs) -> decltype(LhsValueType(lhs)< RhsValueType(rhs))
 Constrained value less-than operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator< (const Checked< ValueType, Checker, NoExcept > &lhs, const Other &rhs) -> decltype(ValueType(lhs)< ValueType(rhs))
 Constrained value less-than operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator< (const Other &lhs, const Checked< ValueType, Checker, NoExcept > &rhs) -> decltype(ValueType(lhs)< ValueType(rhs))
 Constrained value less-than operator. More...
 
template<std::size_t N>
inline ::std::ostream & operator<< (::std::ostream &os, const AABB< N > &value)
 Output stream operator.
 
template<class ValueType , class Checker , bool NoExcept>
auto operator<< (::std::ostream &os, const Checked< ValueType, Checker, NoExcept > &value) -> decltype(os<< ValueType(value))
 Constrained value stream output operator for value types which support it. More...
 
template<std::size_t N>
bool operator<= (const AABB< N > &lhs, const AABB< N > &rhs) noexcept
 Less-than or equal-to operator.
 
template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator<= (const Checked< LhsValueType, LhsChecker, LhsNoExcept > &lhs, const Checked< RhsValueType, RhsChecker, RhsNoExcept > &rhs) -> decltype(LhsValueType(lhs)<=RhsValueType(rhs))
 Constrained value less-than or equal-to operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator<= (const Checked< ValueType, Checker, NoExcept > &lhs, const Other &rhs) -> decltype(ValueType(lhs)<=ValueType(rhs))
 Constrained value less-than or equal-to operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator<= (const Other &lhs, const Checked< ValueType, Checker, NoExcept > &rhs) -> decltype(ValueType(lhs)<=ValueType(rhs))
 Constrained value less-than or equal-to operator. More...
 
template<std::size_t N>
constexpr bool operator== (const AABB< N > &lhs, const AABB< N > &rhs) noexcept
 Gets whether the two AABB objects are equal. More...
 
template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator== (const Checked< LhsValueType, LhsChecker, LhsNoExcept > &lhs, const Checked< RhsValueType, RhsChecker, RhsNoExcept > &rhs) noexcept(noexcept(std::declval< LhsValueType >()==std::declval< RhsValueType >())) -> decltype(LhsValueType(lhs)==RhsValueType(rhs))
 Constrained value equality operator for value types which support it. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator== (const Checked< ValueType, Checker, NoExcept > &lhs, const Other &rhs) -> decltype(ValueType(lhs)==rhs)
 Constrained value equality operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator== (const Other &lhs, const Checked< ValueType, Checker, NoExcept > &rhs) -> decltype(lhs==ValueType(rhs))
 Constrained value equality operator. More...
 
template<std::size_t N>
constexpr bool operator== (MassData< N > lhs, MassData< N > rhs)
 Equality operator for mass data.
 
template<std::size_t N>
bool operator> (const AABB< N > &lhs, const AABB< N > &rhs) noexcept
 Greater-than operator.
 
template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator> (const Checked< LhsValueType, LhsChecker, LhsNoExcept > &lhs, const Checked< RhsValueType, RhsChecker, RhsNoExcept > &rhs) -> decltype(LhsValueType(lhs) > RhsValueType(rhs))
 Constrained value greater-than operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator> (const Checked< ValueType, Checker, NoExcept > &lhs, const Other &rhs) -> decltype(ValueType(lhs) > ValueType(rhs))
 Constrained value greater-than operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator> (const Other &lhs, const Checked< ValueType, Checker, NoExcept > &rhs) -> decltype(ValueType(lhs) > ValueType(rhs))
 Constrained value greater-than ooperator. More...
 
template<std::size_t N>
bool operator>= (const AABB< N > &lhs, const AABB< N > &rhs) noexcept
 Greater-than or equal-to operator.
 
template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator>= (const Checked< LhsValueType, LhsChecker, LhsNoExcept > &lhs, const Checked< RhsValueType, RhsChecker, RhsNoExcept > &rhs) -> decltype(LhsValueType(lhs) >=RhsValueType(rhs))
 Constrained value greater-than or equal-to operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator>= (const Checked< ValueType, Checker, NoExcept > &lhs, const Other &rhs) -> decltype(ValueType(lhs) >=ValueType(rhs))
 Constrained value greater-than or equal-to operator. More...
 
template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator>= (const Other &lhs, const Checked< ValueType, Checker, NoExcept > &rhs) -> decltype(ValueType(lhs) >=ValueType(rhs))
 Constrained value greater-than or equal-to operator. More...
 
template<std::size_t N>
constexpr bool TestOverlap (const AABB< N > &a, const AABB< N > &b) noexcept
 Tests for overlap between two axis aligned bounding boxes. More...
 
template<typename T >
std::string TypeNameAsString ()
 Gets the template type parameter's type name as a non-empty unique string. More...
 
template<typename T , typename Tag >
constexpr const T & UnderlyingValue (const IndexingNamedType< T, Tag > &o) noexcept
 Gets the underlying value.
 
template<typename T , typename Tag >
constexpr T & UnderlyingValue (IndexingNamedType< T, Tag > &o) noexcept
 Gets the underlying value.
 

Variables

constexpr auto hertz = 1
 Hertz unit value.
 
constexpr auto HoursPerDay = 24
 Hours per day.
 
template<template< class... > class Op, class... Args>
constexpr bool is_detected_v = is_detected<Op, Args...>::value
 Is-detected-value. More...
 
constexpr auto kilogram = 1
 Kilogram unit value.
 
constexpr auto kilogram_per_square_meter = 1
 Kilogram per meter^2 unit value.
 
constexpr auto meter = 1
 Meter unit value.
 
constexpr auto meter_per_second = 1
 Meter per second unit value.
 
constexpr auto meter_per_second_squared = 1
 Meter per second^2 unit value.
 
constexpr auto MinutesPerHour = 60
 Minutes per hour.
 
constexpr auto newton = 1
 Newton unit value.
 
constexpr auto newton_meter = 1
 Newton meter unit value.
 
constexpr auto radian = 1
 Radian unit value.
 
constexpr auto radian_per_second = 1
 Radian per second unit value.
 
constexpr auto second = 1
 Second unit value.
 
constexpr auto SecondsPerMinute = 60
 Seconds per minute.
 
constexpr auto square_meter = 1
 Square meter unit value.
 

Detailed Description

Name space for internal/detail related PlayRho names.

Typedef Documentation

◆ is_detected

template<template< class... > class Op, class... Args>
using playrho::detail::is_detected = typedef typename detector<nonesuch, void, Op, Args...>::value_t

Function Documentation

◆ Contains()

template<std::size_t N>
constexpr bool Contains ( const AABB< N > &  a,
const AABB< N > &  b 
)
constexprnoexcept

Checks whether the first AABB fully contains the second AABB.

Whether the first AABB contains the entirety of the second AABB where containment is defined as being equal-to or within an AABB.

Note
The "unset" AABB is contained by all valid AABBs including the "unset" AABB itself.
Parameters
aAABB to test whether it contains the second AABB.
bAABB to test whether it's contained by the first AABB.

◆ GetNameForTypeInfo()

template<typename T >
const char* playrho::detail::GetNameForTypeInfo ( )

Gets a null-terminated byte string identifying this function.

Note
Intended for use by TypeInfo to set the value of its name variable to something dependent on the type and avoid issues like TypeInfo::name being a non-unique address like happens on MSVC when whole program is turned on. Such an issue is documented in Issue #370.
See also
https://github.com/louis-langholtz/PlayRho/issues/370

◆ Include()

template<std::size_t N>
constexpr AABB< N > & Include ( AABB< N > &  var,
const AABB< N > &  val 
)
constexprnoexcept

Includes the second AABB into the first one.

Note
If an unset AABB is added to the first AABB, the result will be the first AABB.
If the first AABB is unset and another AABB is added to it, the result will be the other AABB.

◆ operator!=() [1/4]

template<std::size_t N>
constexpr bool operator!= ( const AABB< N > &  lhs,
const AABB< N > &  rhs 
)
constexprnoexcept

Gets whether the two AABB objects are not equal.

Returns
true if the two values are not equal, false otherwise.

◆ operator!=() [2/4]

template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator!= ( const Checked< LhsValueType, LhsChecker, LhsNoExcept > &  lhs,
const Checked< RhsValueType, RhsChecker, RhsNoExcept > &  rhs 
) -> decltype(LhsValueType(lhs) != RhsValueType(rhs))
constexprnoexcept

Constrained value inequality operator for value types which support it.

Template Parameters
LhsValueTypeType of the value used by the left hand side checked value.
LhsCheckerType of the checker used by the left hand side checked value.
LhsNoExceptWhether left hand side type terminates or just throws for invalid values.
RhsValueTypeType of the value used by the right hand side checked value.
RhsCheckerType of the checker used by the right hand side checked value.
RhsNoExceptWhether right hand side type terminates or just throws for invalid values.

◆ operator!=() [3/4]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator!= ( const Checked< ValueType, Checker, NoExcept > &  lhs,
const Other &  rhs 
) -> decltype(ValueType(lhs) != rhs)
constexpr

Constrained value inequality operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator!=() [4/4]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator!= ( const Other &  lhs,
const Checked< ValueType, Checker, NoExcept > &  rhs 
) -> decltype(lhs != ValueType(rhs))
constexpr

Constrained value inequality operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator*() [1/3]

template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator* ( const Checked< LhsValueType, LhsChecker, LhsNoExcept > &  lhs,
const Checked< RhsValueType, RhsChecker, RhsNoExcept > &  rhs 
) -> decltype(LhsValueType(lhs) * RhsValueType(rhs))
constexpr

Constrained value multiplication operator.

Template Parameters
LhsValueTypeType of the value used by the left hand side checked value.
LhsCheckerType of the checker used by the left hand side checked value.
LhsNoExceptWhether left hand side type terminates or just throws for invalid values.
RhsValueTypeType of the value used by the right hand side checked value.
RhsCheckerType of the checker used by the right hand side checked value.
RhsNoExceptWhether right hand side type terminates or just throws for invalid values.

◆ operator*() [2/3]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator* ( const Checked< ValueType, Checker, NoExcept > &  lhs,
const Other &  rhs 
) -> std::enable_if_t<!IsMultipliableV<Checked<ValueType, Checker, NoExcept>, Other>, decltype(ValueType()*Other())>
constexpr

Constrained value multiplication operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator*() [3/3]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator* ( const Other &  lhs,
const Checked< ValueType, Checker, NoExcept > &  rhs 
) -> std::enable_if_t<!IsMultipliableV<Other, Checked<ValueType, Checker, NoExcept>>, decltype(Other()*ValueType())>
constexpr

Constrained value multiplication operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator+() [1/3]

template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator+ ( const Checked< LhsValueType, LhsChecker, LhsNoExcept > &  lhs,
const Checked< RhsValueType, RhsChecker, RhsNoExcept > &  rhs 
) -> decltype(LhsValueType(lhs) + RhsValueType(rhs))
constexpr

Constrained value addition operator.

Template Parameters
LhsValueTypeType of the value used by the left hand side checked value.
LhsCheckerType of the checker used by the left hand side checked value.
LhsNoExceptWhether left hand side type terminates or just throws for invalid values.
RhsValueTypeType of the value used by the right hand side checked value.
RhsCheckerType of the checker used by the right hand side checked value.
RhsNoExceptWhether right hand side type terminates or just throws for invalid values.

◆ operator+() [2/3]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator+ ( const Checked< ValueType, Checker, NoExcept > &  lhs,
const Other &  rhs 
) -> decltype(ValueType(lhs) + rhs)
constexpr

Constrained value addition operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator+() [3/3]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator+ ( const Other &  lhs,
const Checked< ValueType, Checker, NoExcept > &  rhs 
) -> decltype(lhs + ValueType(rhs))
constexpr

Constrained value addition operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator-() [1/3]

template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator- ( const Checked< LhsValueType, LhsChecker, LhsNoExcept > &  lhs,
const Checked< RhsValueType, RhsChecker, RhsNoExcept > &  rhs 
) -> decltype(LhsValueType(lhs) - RhsValueType(rhs))
constexpr

Constrained value subtraction operator.

Template Parameters
LhsValueTypeType of the value used by the left hand side checked value.
LhsCheckerType of the checker used by the left hand side checked value.
LhsNoExceptWhether left hand side type terminates or just throws for invalid values.
RhsValueTypeType of the value used by the right hand side checked value.
RhsCheckerType of the checker used by the right hand side checked value.
RhsNoExceptWhether right hand side type terminates or just throws for invalid values.

◆ operator-() [2/3]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator- ( const Checked< ValueType, Checker, NoExcept > &  lhs,
const Other &  rhs 
) -> decltype(ValueType(lhs) - rhs)
constexpr

Constrained value subtraction operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator-() [3/3]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator- ( const Other &  lhs,
const Checked< ValueType, Checker, NoExcept > &  rhs 
) -> decltype(lhs - ValueType(rhs))
constexpr

Constrained value subtraction operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator/() [1/3]

template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator/ ( const Checked< LhsValueType, LhsChecker, LhsNoExcept > &  lhs,
const Checked< RhsValueType, RhsChecker, RhsNoExcept > &  rhs 
) -> decltype(LhsValueType(lhs) / RhsValueType(rhs))
constexpr

Constrained value division operator.

Template Parameters
LhsValueTypeType of the value used by the left hand side checked value.
LhsCheckerType of the checker used by the left hand side checked value.
LhsNoExceptWhether left hand side type terminates or just throws for invalid values.
RhsValueTypeType of the value used by the right hand side checked value.
RhsCheckerType of the checker used by the right hand side checked value.
RhsNoExceptWhether right hand side type terminates or just throws for invalid values.

◆ operator/() [2/3]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator/ ( const Checked< ValueType, Checker, NoExcept > &  lhs,
const Other &  rhs 
) -> decltype(ValueType(lhs) / rhs)
constexpr

Constrained value division operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator/() [3/3]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator/ ( const Other &  lhs,
const Checked< ValueType, Checker, NoExcept > &  rhs 
) -> decltype(lhs / ValueType(rhs))
constexpr

Constrained value division operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator<() [1/3]

template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator< ( const Checked< LhsValueType, LhsChecker, LhsNoExcept > &  lhs,
const Checked< RhsValueType, RhsChecker, RhsNoExcept > &  rhs 
) -> decltype(LhsValueType(lhs) < RhsValueType(rhs))
constexpr

Constrained value less-than operator.

Template Parameters
LhsValueTypeType of the value used by the left hand side checked value.
LhsCheckerType of the checker used by the left hand side checked value.
LhsNoExceptWhether left hand side type terminates or just throws for invalid values.
RhsValueTypeType of the value used by the right hand side checked value.
RhsCheckerType of the checker used by the right hand side checked value.
RhsNoExceptWhether right hand side type terminates or just throws for invalid values.

◆ operator<() [2/3]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator< ( const Checked< ValueType, Checker, NoExcept > &  lhs,
const Other &  rhs 
) -> decltype(ValueType(lhs) < ValueType(rhs))
constexpr

Constrained value less-than operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator<() [3/3]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator< ( const Other &  lhs,
const Checked< ValueType, Checker, NoExcept > &  rhs 
) -> decltype(ValueType(lhs) < ValueType(rhs))
constexpr

Constrained value less-than operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator<<()

template<class ValueType , class Checker , bool NoExcept>
auto operator<< ( ::std::ostream &  os,
const Checked< ValueType, Checker, NoExcept > &  value 
) -> decltype(os << ValueType(value))

Constrained value stream output operator for value types which support it.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.

◆ operator<=() [1/3]

template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator<= ( const Checked< LhsValueType, LhsChecker, LhsNoExcept > &  lhs,
const Checked< RhsValueType, RhsChecker, RhsNoExcept > &  rhs 
) -> decltype(LhsValueType(lhs) <= RhsValueType(rhs))
constexpr

Constrained value less-than or equal-to operator.

Template Parameters
LhsValueTypeType of the value used by the left hand side checked value.
LhsCheckerType of the checker used by the left hand side checked value.
LhsNoExceptWhether left hand side type terminates or just throws for invalid values.
RhsValueTypeType of the value used by the right hand side checked value.
RhsCheckerType of the checker used by the right hand side checked value.
RhsNoExceptWhether right hand side type terminates or just throws for invalid values.

◆ operator<=() [2/3]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator<= ( const Checked< ValueType, Checker, NoExcept > &  lhs,
const Other &  rhs 
) -> decltype(ValueType(lhs) <= ValueType(rhs))
constexpr

Constrained value less-than or equal-to operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator<=() [3/3]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator<= ( const Other &  lhs,
const Checked< ValueType, Checker, NoExcept > &  rhs 
) -> decltype(ValueType(lhs) <= ValueType(rhs))
constexpr

Constrained value less-than or equal-to operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator==() [1/4]

template<std::size_t N>
constexpr bool operator== ( const AABB< N > &  lhs,
const AABB< N > &  rhs 
)
constexprnoexcept

Gets whether the two AABB objects are equal.

Returns
true if the two values are equal, false otherwise.

◆ operator==() [2/4]

template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator== ( const Checked< LhsValueType, LhsChecker, LhsNoExcept > &  lhs,
const Checked< RhsValueType, RhsChecker, RhsNoExcept > &  rhs 
) -> decltype(LhsValueType(lhs) == RhsValueType(rhs))
constexprnoexcept

Constrained value equality operator for value types which support it.

Template Parameters
LhsValueTypeType of the value used by the left hand side checked value.
LhsCheckerType of the checker used by the left hand side checked value.
LhsNoExceptWhether left hand side type terminates or just throws for invalid values.
RhsValueTypeType of the value used by the right hand side checked value.
RhsCheckerType of the checker used by the right hand side checked value.
RhsNoExceptWhether right hand side type terminates or just throws for invalid values.

◆ operator==() [3/4]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator== ( const Checked< ValueType, Checker, NoExcept > &  lhs,
const Other &  rhs 
) -> decltype(ValueType(lhs) == rhs)
constexpr

Constrained value equality operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator==() [4/4]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator== ( const Other &  lhs,
const Checked< ValueType, Checker, NoExcept > &  rhs 
) -> decltype(lhs == ValueType(rhs))
constexpr

Constrained value equality operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator>() [1/3]

template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator> ( const Checked< LhsValueType, LhsChecker, LhsNoExcept > &  lhs,
const Checked< RhsValueType, RhsChecker, RhsNoExcept > &  rhs 
) -> decltype(LhsValueType(lhs) > RhsValueType(rhs))
constexpr

Constrained value greater-than operator.

Template Parameters
LhsValueTypeType of the value used by the left hand side checked value.
LhsCheckerType of the checker used by the left hand side checked value.
LhsNoExceptWhether left hand side type terminates or just throws for invalid values.
RhsValueTypeType of the value used by the right hand side checked value.
RhsCheckerType of the checker used by the right hand side checked value.
RhsNoExceptWhether right hand side type terminates or just throws for invalid values.

◆ operator>() [2/3]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator> ( const Checked< ValueType, Checker, NoExcept > &  lhs,
const Other &  rhs 
) -> decltype(ValueType(lhs) > ValueType(rhs))
constexpr

Constrained value greater-than operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator>() [3/3]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator> ( const Other &  lhs,
const Checked< ValueType, Checker, NoExcept > &  rhs 
) -> decltype(ValueType(lhs) > ValueType(rhs))
constexpr

Constrained value greater-than ooperator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator>=() [1/3]

template<class LhsValueType , class LhsChecker , bool LhsNoExcept, class RhsValueType , class RhsChecker , bool RhsNoExcept>
constexpr auto operator>= ( const Checked< LhsValueType, LhsChecker, LhsNoExcept > &  lhs,
const Checked< RhsValueType, RhsChecker, RhsNoExcept > &  rhs 
) -> decltype(LhsValueType(lhs) >= RhsValueType(rhs))
constexpr

Constrained value greater-than or equal-to operator.

Template Parameters
LhsValueTypeType of the value used by the left hand side checked value.
LhsCheckerType of the checker used by the left hand side checked value.
LhsNoExceptWhether left hand side type terminates or just throws for invalid values.
RhsValueTypeType of the value used by the right hand side checked value.
RhsCheckerType of the checker used by the right hand side checked value.
RhsNoExceptWhether right hand side type terminates or just throws for invalid values.

◆ operator>=() [2/3]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator>= ( const Checked< ValueType, Checker, NoExcept > &  lhs,
const Other &  rhs 
) -> decltype(ValueType(lhs) >= ValueType(rhs))
constexpr

Constrained value greater-than or equal-to operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ operator>=() [3/3]

template<class ValueType , class Checker , bool NoExcept, class Other >
constexpr auto operator>= ( const Other &  lhs,
const Checked< ValueType, Checker, NoExcept > &  rhs 
) -> decltype(ValueType(lhs) >= ValueType(rhs))
constexpr

Constrained value greater-than or equal-to operator.

Template Parameters
ValueTypeType of the value used by the checked value.
CheckerType of the checker used by the checked value.
NoExceptWhether checked type terminates or just throws for invalid values.
OtherType of the other value that this operation will operator with.

◆ TestOverlap()

template<std::size_t N>
constexpr bool TestOverlap ( const AABB< N > &  a,
const AABB< N > &  b 
)
constexprnoexcept

Tests for overlap between two axis aligned bounding boxes.

Note
This function's complexity is constant.

◆ TypeNameAsString()

template<typename T >
std::string playrho::detail::TypeNameAsString ( )

Gets the template type parameter's type name as a non-empty unique string.

Note
This string is the demangled name on supporting compilers, otherwise the mangled name is used and C++ run-time type information (RTTI) needs to be available.
This code relies on the compiler being clang or GCC compatible supporting the clang or GNUC preprocessor macro and the PRETTY_FUNCTION identifier, or the compiler supporting the Microsoft Visual C++ style FUNCSIG macro. C++20's support for std::source_location::function_name could help make this function more portable, but only slightly since the returned string's format is still implementation defined.

Variable Documentation

◆ is_detected_v

template<template< class... > class Op, class... Args>
constexpr bool playrho::detail::is_detected_v = is_detected<Op, Args...>::value
constexpr