xtd 0.2.0
Loading...
Searching...
No Matches
unary_minus_expression.hpp
Go to the documentation of this file.
1
4#pragma once
5#include "as_expression.hpp"
9#include <utility>
10
12namespace xtd {
14 namespace expressions {
26 template <typename value_t>
27 struct unary_minus_expression : unary_expression {
29
34
36
39 constexpr unary_minus_expression() = default;
40
43 constexpr unary_minus_expression(value_t value) : value {std::move(value)} {}
45
47
52 template <typename... args_t>
53 constexpr auto operator()(args_t&&... args) const {return -value(std::forward<args_t>(args)...);}
55
57 friend inline auto operator <<(std::ostream& os, const unary_minus_expression& e) -> std::ostream& {return os << "-" << expression_stream {e.value, e.precedence};}
59
60 private:
61 [[no_unique_address]] value_t value;
62 };
63
65 template <typename vakue_t>
66 requires std::is_base_of_v<expression, std::decay_t<vakue_t>>
67 constexpr auto expression::negate(vakue_t value) {return expression::unary_minus(std::move(value));}
68
69 template <typename vakue_t>
70 requires std::is_base_of_v<expression, std::decay_t<vakue_t>>
71 constexpr auto expression::unary_minus(vakue_t value) {
72 auto expression = as_expression(value);
73 return unary_minus_expression<std::decay_t<decltype(expression)>> {std::move(expression)};
74 }
76
78
111 template <typename value_t>
113 constexpr auto operator -(value_t value) {return expression::unary_minus(std::move(value));}
115 }
116}
Contains xtd::expressions::as_expression methods.
The xtd::expressions::expression_operand object is expression operand concept.
Definition expression_operand.hpp:27
Contains xtd::expressions::expression_operand concept.
Contains xtd::expressions::expression_stream struct.
constexpr auto operator-(left_t left, right_t right)
Subtract the specified left and right operands.
Definition subtract_expression.hpp:121
operator_precedence
Specifies the operator precedence.
Definition operator_precedence.hpp:22
constexpr decltype(auto) as_expression(type_t &&value)
The xtd::expressions::as_expression method convert a type as xtd::expressions::expression.
Definition as_expression.hpp:33
constexpr auto operator<<(left_t left, right_t right)
Subtract the specified left and right operands.
Definition left_shift_expression.hpp:127
constexpr auto args()
Generates a set of positional placeholders that can be decomposed using structured bindings to build ...
Definition args.hpp:43
@ unary_minus
Represnets the unary minus operator precedence (-a).
Definition operator_precedence.hpp:54
@ e
The E key.
Definition console_key.hpp:96
The xtd::expressions namespace provides a lightweight, composable expression template framework for b...
Definition add_expression.hpp:14
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8
The xtd::expressions::expression_stream is the streamable class for expression objects.
Definition expression_stream.hpp:23
static constexpr auto negate(value_t value)
Unary minus the specified left and right operands.
static constexpr auto unary_minus(value_t value)
Unary minus the specified left and right operands.
static constexpr auto value(type_t value)
Gets the value value.
The xtd::expressions::unary_minus_expression is the unary minus expression.
Definition unary_minus_expression.hpp:27
constexpr unary_minus_expression(value_t value)
Initialize a new xtd::expressions::unary_minus_expression object with specified value operand.
Definition unary_minus_expression.hpp:43
static constexpr operator_precedence precedence
The operator precedence. That contains one of xtd::expressions::operator_precedence values.
Definition unary_minus_expression.hpp:32
constexpr unary_minus_expression()=default
Initialize a new xtd::expressions::unary_minus_expression object.
constexpr auto operator()(args_t &&... args) const
Add the specified arguments.
Definition unary_minus_expression.hpp:53
The xtd::expressions::value is the value wrapper.
Definition value.hpp:55
Contains xtd::expressions::unary_expression struct.