This is my re-review of Boost.Multi. I'll be checking
the points that I raised during my previous review [1]
and a couple more new findings.
#include <boost/multi/array.hpp>
namespace multi = boost::multi;
int main() {
multi::array<double, 2> arr = {
{1.0, 2.0, 3.0},
{3.0, 4.0, 5.0},
{6.0, 7.0, 8.0},
};
for(auto&& elm : arr.strided(2)) {
std::cout << elm.size() << std::endl;
}
}
#include <boost/multi/array.hpp>
#include <iostream>
namespace multi = boost::multi;
int main() {
multi::array<double, 2> arr = {
{1.0, 2.0, 3.0, 4.0},
{3.0, 4.0, 5.0, 8.0},
{6.0, 7.0, 8.0, 10.0},
};
for(auto&& subarr : arr.strided(-1))
std::cout << subarr.size() << std::endl;
}
template<> inline constexpr
bool multi::force_element_trivial_default_construction<std::complex<double>>
= true; // should be defined as early as possible
This is only well-defined in C++20 (and UB in C++17). It is also
prone to ODR violations, especially since the specializations are controlled
by a macro definition.
I feel the library is at a similar point as last time I looked at it, so
I keep my original vote: REJECT with the encouragement of a re-review,
once the feedback is incorporated into it.
Regards,
Ruben.
[1] https://lists.boost.org/archives/list/boost@lists.boost.org/message/Q4GLGQVJ26LVQE5INMF73PKBSJ67FUCH/
[2] https://correaa.github.io/boost-multi/multi/reference.html
[3] https://correaa.github.io/boost-multi/multi/reference/index.html
[4] https://www.boost.org/doc/libs/latest/doc/antora/url/reference.html
[5] https://correaa.github.io/boost-multi/multi/interop.html#interop_fmt
[6] https://correaa.github.io/boost-multi/multi/technical.html#technical_iteration
This is my re-review of Boost.Multi. I'll be checking
the points that I raised during my previous review [1]
and a couple more new findings.
The page on concepts [2] is worth reading.
Although it is called "reference", but it is not.
The front page needs a table organizing the entities
(see how Boost.Url does it, for example [4]).
There must be no entries with blank documentation.
All adapters are also missing there.
but the function is absent from the documentation. There is an example in
Godbolt about it that doesn't compile.
than example/),
and aren't built by CI.
with fmtlib (the example [5] doesn't built in my machine).
causes an infinite loop in my machine. I was trying to see if Asan complained
about the invalid pointer formation issue [6]. It doesn't, but the code
misbehaves. The following causes an infinite loop:
causes an infinite loop, too:
The library has gained a trait to treat std::complex
as trivial:
This is only well-defined in C++20 (and UB in C++17). It is also
prone to ODR violations, especially since the specializations are controlled
by a macro definition.
I feel the library is at a similar point as last time I looked at it, so
I keep my original vote: REJECT with the encouragement of a re-review,
once the feedback is incorporated into it.
Regards,
Ruben.
[1] https://lists.boost.org/archives/list/boost@lists.boost.org/message/Q4GLGQVJ26LVQE5INMF73PKBSJ67FUCH/
[2] https://correaa.github.io/boost-multi/multi/reference.html
[3] https://correaa.github.io/boost-multi/multi/reference/index.html
[4] https://www.boost.org/doc/libs/latest/doc/antora/url/reference.html
[5] https://correaa.github.io/boost-multi/multi/interop.html#interop_fmt
[6] https://correaa.github.io/boost-multi/multi/technical.html#technical_iteration