27 template<
typename left_t,
typename right_t>
28 struct or_ : binary_expression {
40 constexpr or_() =
default;
45 constexpr or_(left_t left, right_t right) : left {std::move(left)}, right {std::move(right)} {}
54 template<
typename... args_t>
56 auto&&
l = left(std::forward<args_t>(
args)...);
57 auto&&
r = right(std::forward<args_t>(
args)...);
58 using result_t = std::decay_t<
decltype(
l &
r)>;
65 friend inline auto operator <<(std::ostream& os,
const or_&
e) -> std::ostream& {
return os <<
expression_stream {
e.left,
e.precedence} <<
" | " << expression_stream {
e.right,
e.precedence};}
69 [[no_unique_address]] left_t left;
70 [[no_unique_address]] right_t right;
74 template<
typename left_t,
typename right_t>
75 requires std::is_base_of_v<expression, std::decay_t<left_t>> || std::is_base_of_v<expression, std::decay_t<right_t>>
79 return expressions::or_<std::decay_t<
decltype(left_expression)>, std::decay_t<
decltype(right_expression)>> {std::move(left_expression), std::move(right_expression)};
126 template<
typename left_t,
typename right_t>
Contains xtd::expressions::as_expression methods.
Contains xtd::expressions::binary_expression struct.
The xtd::expressions::expression_operand object is expression operand concept.
Definition expression_operand.hpp:27
Definition numeric.hpp:12
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 left_shift.hpp:127
operator_precedence
Specifies the operator precedence.
Definition operator_precedence.hpp:22
constexpr auto operator|(expression_t expression, member_type< member_t > member)
Bind member operator.
Definition member_expression.hpp:191
@ bitwise_or
Represnets the bitwise or operator precedence (a | b).
Definition operator_precedence.hpp:114
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
@ l
The L key.
Definition console_key.hpp:110
@ r
The R key.
Definition console_key.hpp:122
@ e
The E key.
Definition console_key.hpp:96
The xtd::expressions namespace provides a lightweight, composable expression template framework for b...
Definition add.hpp:14
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8
Contains xtd::numeric concept.
Generates a set of positional args that can be decomposed using structured bindings to build readable...
Definition args.hpp:42
The xtd::expressions::expression_stream is the streamable class for expression objects.
Definition expression_stream.hpp:23
static constexpr auto or_(left_t left, right_t right)
Bitwise or the specified left and right operands.
The xtd::expressions::or_ is the bitwise or expression.
Definition or.hpp:28
constexpr auto operator()(args_t &&... args) const
Bitwise or the specified arguments.
Definition or.hpp:55
constexpr or_(left_t left, right_t right)
Initialize a new xtd::expressions::or_ object with specified left and right operands.
Definition or.hpp:45
static constexpr operator_precedence precedence
The operator precedence. That contains one of xtd::expressions::operator_precedence values.
Definition or.hpp:33
constexpr or_()=default
Initialize a new xtd::expressions::or_ object.