Arithmetic Operation Result

#include <m3ta/arithmeticoperationresult>

Deduces the resulting type of an arithmetic operation between the given type elements.

The deduction follows a left-to-right associativity, meaning that a + b + c is evaluated as (a + b) + c.

Enumerators

m3ta::ArithmeticOperator
enum class ArithmeticOperator {
    addition,
    subtraction,
    multiplication,
    division
};
addition

Addition operator +.

subtraction

Subtraction operator -.

multiplication

Multiplication operator *.

division

Division operator /.

Traits

m3ta::ArithmeticOperationResult
template<ArithmeticOperator T_operator, typename ... T_Values>
struct ArithmeticOperationResult
Template Parameters:
 
  • T_operator – Operator to use for the check.
  • T_Values – Variable number of types to check.

Member Types

type

The resulting type of the arithmetic operation between the given type elements.

Aliases

m3ta::ArithmeticOperationResultT
template<ArithmeticOperator T_operator, typename ... T_Values>
using ArithmeticOperationResultT =
    typename ArithmeticOperationResult<T_operator, T_Values ...>::type;
m3ta::AdditionResult
template<typename ... T_Values>
using AdditionResult =
    ArithmeticOperationResult<ArithmeticOperator::addition, T_Values ...>;
m3ta::AdditionResultT
template<typename ... T_Values>
using AdditionResultT =
    typename AdditionResult<T_Values ...>::type;
m3ta::SubtractionResult
template<typename ... T_Values>
using SubtractionResult =
    ArithmeticOperationResult<ArithmeticOperator::subtraction, T_Values ...>;
m3ta::SubtractionResultT
template<typename ... T_Values>
using SubtractionResultT =
    typename SubtractionResult<T_Values ...>::type;
m3ta::MultiplicationResult
template<typename ... T_Values>
using MultiplicationResult =
    ArithmeticOperationResult<ArithmeticOperator::multiplication, T_Values ...>;
m3ta::MultiplicationResultT
template<typename ... T_Values>
using MultiplicationResultT =
    typename MultiplicationResult<T_Values ...>::type;
m3ta::DivisionResult
template<typename ... T_Values>
using DivisionResult =
    ArithmeticOperationResult<ArithmeticOperator::division, T_Values ...>;
m3ta::DivisionResultT
template<typename ... T_Values>
using DivisionResultT =
    typename DivisionResult<T_Values ...>::type;

Usage Examples

using Type1 = m3ta::AdditionResultT<char, short>; // int
using Type2 = m3ta::SubtractionResultT<int, float>; // float
using Type3 = m3ta::ArithmeticOperationResultT<
    m3ta::ArithmeticOperator::multiplication,
    float,
    std::complex<float>
>; // std::complex<float>