OpenSiv3D  v0.6.5
C++20 framework for creative coding
Concepts.hpp File Reference
#include <type_traits>

Macros

#define SIV3D_CONCEPT_INTEGRAL   template <class Int, std::enable_if_t<std::is_integral_v<Int>>* = nullptr>
 
#define SIV3D_CONCEPT_INTEGRAL_   template <class Int, std::enable_if_t<std::is_integral_v<Int>>*>
 
#define SIV3D_CONCEPT_SIGNED_INTEGRAL   template <class SignedInt, std::enable_if_t<std::conjunction_v<std::is_integral<SignedInt>, std::is_signed<SignedInt>>>* = nullptr>
 
#define SIV3D_CONCEPT_SIGNED_INTEGRAL_   template <class SignedInt, std::enable_if_t<std::conjunction_v<std::is_integral<SignedInt>, std::is_signed<SignedInt>>>*>
 
#define SIV3D_CONCEPT_UNSIGNED_INTEGRAL   template <class UnsignedInt, std::enable_if_t<std::conjunction_v<std::is_integral<UnsignedInt>, std::negation<std::is_signed<UnsignedInt>>>>* = nullptr>
 
#define SIV3D_CONCEPT_UNSIGNED_INTEGRAL_   template <class UnsignedInt, std::enable_if_t<std::conjunction_v<std::is_integral<UnsignedInt>, std::negation<std::is_signed<UnsignedInt>>>>*>
 
#define SIV3D_CONCEPT_FLOATING_POINT   template <class Float, std::enable_if_t<std::is_floating_point_v<Float>>* = nullptr>
 
#define SIV3D_CONCEPT_FLOATING_POINT_   template <class Float, std::enable_if_t<std::is_floating_point_v<Float>>*>
 
#define SIV3D_CONCEPT_SCALAR   template <class Scalar, std::enable_if_t<std::is_scalar_v<Scalar>>* = nullptr>
 
#define SIV3D_CONCEPT_SCALAR_   template <class Scalar, std::enable_if_t<std::is_scalar_v<Scalar>>*>
 
#define SIV3D_CONCEPT_NONSCALAR   template <class NonScalar, std::enable_if_t<not std::is_scalar_v<NonScalar>>* = nullptr>
 
#define SIV3D_CONCEPT_NONSCALAR_   template <class NonScalar, std::enable_if_t<not std::is_scalar_v<NonScalar>>*>
 
#define SIV3D_CONCEPT_ARITHMETIC   template <class Arithmetic, std::enable_if_t<std::is_arithmetic_v<Arithmetic>>* = nullptr>
 
#define SIV3D_CONCEPT_ARITHMETIC_   template <class Arithmetic, std::enable_if_t<std::is_arithmetic_v<Arithmetic>>*>
 
#define SIV3D_CONCEPT_ENUM   template <class Enum, std::enable_if_t<std::is_enum_v<Enum>>* = nullptr>
 
#define SIV3D_CONCEPT_ENUM_   template <class Enum, std::enable_if_t<std::is_enum_v<Enum>>*>
 
#define SIV3D_CONCEPT_TRIVIALLY_COPYABLE   template <class TriviallyCopyable, std::enable_if_t<std::is_trivially_copyable_v<TriviallyCopyable>>* = nullptr>
 
#define SIV3D_CONCEPT_TRIVIALLY_COPYABLE_   template <class TriviallyCopyable, std::enable_if_t<std::is_trivially_copyable_v<TriviallyCopyable>>*>
 
#define SIV3D_CONCEPT_URBG   template <class URBG, std::enable_if_t<std::conjunction_v<std::is_invocable<URBG&>, std::is_unsigned<std::invoke_result_t<URBG&>>>>* = nullptr>
 
#define SIV3D_CONCEPT_URBG_   template <class URBG, std::enable_if_t<std::conjunction_v<std::is_invocable<URBG&>, std::is_unsigned<std::invoke_result_t<URBG&>>>>*>
 
#define SIV3D_CONCEPT_FORMATTABLE_ARGS   template <class... Args>
 
#define SIV3D_CONCEPT_FORMATTABLE_ARGS_   template <class... Args>
 
#define SIV3D_CONCEPT_FORMATTABLE   template <class Formattable, class = decltype(Formatter(std::declval<FormatData&>(), std::declval<Formattable>()))>
 
#define SIV3D_CONCEPT_FORMATTABLE_   template <class Formattable, class>
 

Macro Definition Documentation

◆ SIV3D_CONCEPT_ARITHMETIC

#define SIV3D_CONCEPT_ARITHMETIC   template <class Arithmetic, std::enable_if_t<std::is_arithmetic_v<Arithmetic>>* = nullptr>

◆ SIV3D_CONCEPT_ARITHMETIC_

#define SIV3D_CONCEPT_ARITHMETIC_   template <class Arithmetic, std::enable_if_t<std::is_arithmetic_v<Arithmetic>>*>

◆ SIV3D_CONCEPT_ENUM

#define SIV3D_CONCEPT_ENUM   template <class Enum, std::enable_if_t<std::is_enum_v<Enum>>* = nullptr>

◆ SIV3D_CONCEPT_ENUM_

#define SIV3D_CONCEPT_ENUM_   template <class Enum, std::enable_if_t<std::is_enum_v<Enum>>*>

◆ SIV3D_CONCEPT_FLOATING_POINT

#define SIV3D_CONCEPT_FLOATING_POINT   template <class Float, std::enable_if_t<std::is_floating_point_v<Float>>* = nullptr>

◆ SIV3D_CONCEPT_FLOATING_POINT_

#define SIV3D_CONCEPT_FLOATING_POINT_   template <class Float, std::enable_if_t<std::is_floating_point_v<Float>>*>

◆ SIV3D_CONCEPT_FORMATTABLE

#define SIV3D_CONCEPT_FORMATTABLE   template <class Formattable, class = decltype(Formatter(std::declval<FormatData&>(), std::declval<Formattable>()))>

◆ SIV3D_CONCEPT_FORMATTABLE_

#define SIV3D_CONCEPT_FORMATTABLE_   template <class Formattable, class>

◆ SIV3D_CONCEPT_FORMATTABLE_ARGS

#define SIV3D_CONCEPT_FORMATTABLE_ARGS   template <class... Args>

◆ SIV3D_CONCEPT_FORMATTABLE_ARGS_

#define SIV3D_CONCEPT_FORMATTABLE_ARGS_   template <class... Args>

◆ SIV3D_CONCEPT_INTEGRAL

#define SIV3D_CONCEPT_INTEGRAL   template <class Int, std::enable_if_t<std::is_integral_v<Int>>* = nullptr>

◆ SIV3D_CONCEPT_INTEGRAL_

#define SIV3D_CONCEPT_INTEGRAL_   template <class Int, std::enable_if_t<std::is_integral_v<Int>>*>

◆ SIV3D_CONCEPT_NONSCALAR

#define SIV3D_CONCEPT_NONSCALAR   template <class NonScalar, std::enable_if_t<not std::is_scalar_v<NonScalar>>* = nullptr>

◆ SIV3D_CONCEPT_NONSCALAR_

#define SIV3D_CONCEPT_NONSCALAR_   template <class NonScalar, std::enable_if_t<not std::is_scalar_v<NonScalar>>*>

◆ SIV3D_CONCEPT_SCALAR

#define SIV3D_CONCEPT_SCALAR   template <class Scalar, std::enable_if_t<std::is_scalar_v<Scalar>>* = nullptr>

◆ SIV3D_CONCEPT_SCALAR_

#define SIV3D_CONCEPT_SCALAR_   template <class Scalar, std::enable_if_t<std::is_scalar_v<Scalar>>*>

◆ SIV3D_CONCEPT_SIGNED_INTEGRAL

#define SIV3D_CONCEPT_SIGNED_INTEGRAL   template <class SignedInt, std::enable_if_t<std::conjunction_v<std::is_integral<SignedInt>, std::is_signed<SignedInt>>>* = nullptr>

◆ SIV3D_CONCEPT_SIGNED_INTEGRAL_

#define SIV3D_CONCEPT_SIGNED_INTEGRAL_   template <class SignedInt, std::enable_if_t<std::conjunction_v<std::is_integral<SignedInt>, std::is_signed<SignedInt>>>*>

◆ SIV3D_CONCEPT_TRIVIALLY_COPYABLE

#define SIV3D_CONCEPT_TRIVIALLY_COPYABLE   template <class TriviallyCopyable, std::enable_if_t<std::is_trivially_copyable_v<TriviallyCopyable>>* = nullptr>

◆ SIV3D_CONCEPT_TRIVIALLY_COPYABLE_

#define SIV3D_CONCEPT_TRIVIALLY_COPYABLE_   template <class TriviallyCopyable, std::enable_if_t<std::is_trivially_copyable_v<TriviallyCopyable>>*>

◆ SIV3D_CONCEPT_UNSIGNED_INTEGRAL

#define SIV3D_CONCEPT_UNSIGNED_INTEGRAL   template <class UnsignedInt, std::enable_if_t<std::conjunction_v<std::is_integral<UnsignedInt>, std::negation<std::is_signed<UnsignedInt>>>>* = nullptr>

◆ SIV3D_CONCEPT_UNSIGNED_INTEGRAL_

#define SIV3D_CONCEPT_UNSIGNED_INTEGRAL_   template <class UnsignedInt, std::enable_if_t<std::conjunction_v<std::is_integral<UnsignedInt>, std::negation<std::is_signed<UnsignedInt>>>>*>

◆ SIV3D_CONCEPT_URBG

#define SIV3D_CONCEPT_URBG   template <class URBG, std::enable_if_t<std::conjunction_v<std::is_invocable<URBG&>, std::is_unsigned<std::invoke_result_t<URBG&>>>>* = nullptr>

◆ SIV3D_CONCEPT_URBG_

#define SIV3D_CONCEPT_URBG_   template <class URBG, std::enable_if_t<std::conjunction_v<std::is_invocable<URBG&>, std::is_unsigned<std::invoke_result_t<URBG&>>>>*>