27 template <std::
size_t NN = N,
typename = std::enable_if_t<NN==0>>
34 template <
typename ... Bools,
typename = std::enable_if_t<
sizeof...(Bools)+1==
N>>
38 bool any()
const {
return std::accumulate(this->begin(), this->end(),
false, std::logical_or{}); }
44 bool all()
const {
return std::accumulate(this->begin(), this->end(),
false, std::logical_and{}); }
47 template <std::
size_t C,
typename = std::enable_if_t<C <= N>>
48 array_of_
bools<C> front() const {
49 array_of_
bools<C> result;
50 std::copy(this->begin(), this->begin()+
C, result.begin());
57 template <std::
size_t C,
typename = std::enable_if_t<C <= N>>
58 array_of_
bools& assign_front(const array_of_
bools<C>& a) {
59 std::copy(a.begin(), a.end(), this->begin());
66 template <std::
size_t C,
typename = std::enable_if_t<C <= N>>
67 array_of_
bools and_front(const array_of_
bools<C>& a) const {
68 array_of_
bools result;
69 const auto it = std::transform(a.begin(), a.end(), this->begin(), result.begin(),
71 std::copy(this->begin() +
C, this->end(), it);
78 template <std::
size_t C,
typename = std::enable_if_t<C <= N>>
79 array_of_
bools or_front(const array_of_
bools<C>& a) const {
80 array_of_
bools result;
81 const auto it = std::transform(a.begin(), a.end(), this->begin(), result.begin(),
83 std::copy(this->begin() +
C, this->end(), it);
88 template <std::
size_t C,
typename = std::enable_if_t<C <= N>>
89 array_of_
bools<C> back() const {
90 array_of_
bools<C> result;
91 std::copy(this->begin() + (
N -
C), this->end(), result.begin());
98 template <std::
size_t C,
typename = std::enable_if_t<C <= N>>
99 array_of_
bools& assign_back(const array_of_
bools<C>& a) {
100 std::copy(a.begin(), a.end(), this->begin() + (
N -
C));
107 template <std::
size_t C,
typename = std::enable_if_t<C <= N>>
108 array_of_
bools and_back(const array_of_
bools<C>& a) const {
109 array_of_
bools result;
111 std::copy(this->begin(), this->begin() + (
N -
C), result.begin());
112 std::transform(
a.begin(),
a.end(), this->begin() + (
N -
C), it,
120 template <std::
size_t C,
typename = std::enable_if_t<C <= N>>
121 array_of_
bools or_back(const array_of_
bools<C>& a) const {
122 array_of_
bools result;
124 std::copy(this->begin(), this->begin() + (
N -
C), result.begin());
125 std::transform(
a.begin(),
a.end(), this->begin() + (
N -
C), it,
130 friend array_of_bools<N> operator&&(
const array_of_bools<N>&
a,
const array_of_bools<N>&
b) {
131 array_of_bools<N> result;
132 std::transform(
a.begin(),
a.end(),
b.begin(), result.begin(), std::logical_and{});
135 friend array_of_bools<N> operator||(
const array_of_bools<N>&
a,
const array_of_bools<N>&
b) {
136 array_of_bools<N> result;
137 std::transform(
a.begin(),
a.end(),
b.begin(), result.begin(), std::logical_or{});
140 friend array_of_bools<N> operator^(
const array_of_bools<N>&
a,
const array_of_bools<N>&
b) {
141 array_of_bools<N> result;
142 std::transform(
a.begin(),
a.end(),
b.begin(), result.begin(), [](
auto b1,
auto b2) {
147 friend array_of_bools<N> operator!(
const array_of_bools<N>&
a) {
148 array_of_bools<N> result;
149 std::transform(
a.begin(),
a.end(), result.begin(), std::logical_not{});
153 friend array_of_bools<N> operator&&(
const array_of_bools<N>&
a,
bool b) {
154 array_of_bools<N> result;
155 std::transform(
a.begin(),
a.end(), result.begin(), [
b](
auto a_v) {
160 friend array_of_bools<N> operator&&(
bool b,
const array_of_bools<N>&
a) {
163 friend array_of_bools<N> operator||(
const array_of_bools<N>&
a,
bool b) {
164 array_of_bools<N> result;
165 std::transform(
a.begin(),
a.end(), result.begin(), [
b](
auto a_v) {
170 friend array_of_bools<N> operator||(
bool b,
const array_of_bools<N>&
a) {
173 friend array_of_bools<N> operator^(
const array_of_bools<N>&
a,
bool b) {
174 array_of_bools<N> result;
175 std::transform(
a.begin(),
a.end(), result.begin(), [
b](
auto a_v) {
180 friend array_of_bools<N> operator^(
bool b,
const array_of_bools<N>&
a) {
186 struct nonempty_default_ctor_tag{};
187 template <std::
size_t NN = N,
typename = std::enable_if_t<NN!=0>>
188 explicit array_of_bools(nonempty_default_ctor_tag = {}) {}
190 template <std::
size_t NN>
191 friend class array_of_bools;