ublas::matrix broken with compiler error with build 1.80 but not 1.63
- Dominant language
- C++
- Stars
- 122
- Forks
- 151
- PR merge metrics
- No merged PRs in 30d
Description
Was trying to compile the following code and received the following error information.
## Code:
```
#include
int main()
{
boost::numeric::ublas::matrix u;
u = u / norm_frobenius(u); // u /= norm_frobenius(u) works
return 0;
}
```
## Error:
```
In file included from /opt/boost/boost/typeof/typeof.hpp:216,
from /opt/boost/boost/numeric/ublas/traits.hpp:29,
from /opt/boost/boost/numeric/ublas/storage.hpp:27,
from /opt/boost/boost/numeric/ublas/vector.hpp:21,
from /opt/boost/boost/numeric/ublas/matrix.hpp:18,
from example.cpp:1:
/opt/boost/boost/numeric/ublas/traits.hpp: In instantiation of ‘struct boost::numeric::ublas::promote_traits, boost::numeric::ublas::matrix_norm_frobenius > > >’:
/opt/boost/boost/numeric/ublas/functional.hpp:126:63: required from ‘struct boost::numeric::ublas::scalar_binary_functor, boost::numeric::ublas::matrix_norm_frobenius > > >’
/opt/boost/boost/numeric/ublas/functional.hpp:166:12: required from ‘struct boost::numeric::ublas::scalar_divides, boost::numeric::ublas::matrix_norm_frobenius > > >’
/opt/boost/boost/numeric/ublas/matrix_expression.hpp:3491:34: required from ‘class boost::numeric::ublas::matrix_binary_scalar2, const boost::numeric::ublas::matrix_scalar_unary, boost::numeric::ublas::matrix_norm_frobenius > >, boost::numeric::ublas::scalar_divides, boost::numeric::ublas::matrix_norm_frobenius > > > >’
example.cpp:7:29: required from here
/opt/boost/boost/numeric/ublas/traits.hpp:154:40: error: no matching function for call to ‘boost::numeric::ublas::matrix_scalar_unary, boost::numeric::ublas::matrix_norm_frobenius > >::matrix_scalar_unary()’
154 | typedef BOOST_TYPEOF_TPL(X() + Y()) promote_type;
| ^~~
/opt/boost/boost/typeof/decltype.hpp:17:69: note: in definition of macro ‘BOOST_TYPEOF’
17 | #define BOOST_TYPEOF(expr) boost::type_of::remove_cv_ref_t
| ^~~~
/opt/boost/boost/numeric/ublas/traits.hpp:154:17: note: in expansion of macro ‘BOOST_TYPEOF_TPL’
154 | typedef BOOST_TYPEOF_TPL(X() + Y()) promote_type;
| ^~~~~~~~~~~~~~~~
In file included from /opt/boost/boost/numeric/ublas/matrix.hpp:19,
from example.cpp:1:
/opt/boost/boost/numeric/ublas/matrix_expression.hpp:5637:11: note: candidate: ‘boost::numeric::ublas::matrix_scalar_unary::matrix_scalar_unary(const expression_type&) [with E = boost::numeric::ublas::matrix; F = boost::numeric::ublas::matrix_norm_frobenius >; boost::numeric::ublas::matrix_scalar_unary::expression_type = boost::numeric::ublas::matrix]’
5637 | explicit matrix_scalar_unary (const expression_type &e):
| ^~~~~~~~~~~~~~~~~~~
/opt/boost/boost/numeric/ublas/matrix_expression.hpp:5637:11: note: candidate expects 1 argument, 0 provided
/opt/boost/boost/numeric/ublas/matrix_expression.hpp:5627:7: note: candidate: ‘constexpr boost::numeric::ublas::matrix_scalar_unary, boost::numeric::ublas::matrix_norm_frobenius > >::matrix_scalar_unary(const boost::numeric::ublas::matrix_scalar_unary, boost::numeric::ublas::matrix_norm_frobenius > >&)’
5627 | class matrix_scalar_unary:
| ^~~~~~~~~~~~~~~~~~~
/opt/boost/boost/numeric/ublas/matrix_expression.hpp:5627:7: note: candidate expects 1 argument, 0 provided
/opt/boost/boost/numeric/ublas/matrix_expression.hpp:5627:7: note: candidate: ‘constexpr boost::numeric::ublas::matrix_scalar_unary, boost::numeric::ublas::matrix_norm_frobenius > >::matrix_scalar_unary(boost::numeric::ublas::matrix_scalar_unary, boost::numeric::ublas::matrix_norm_frobenius > >&&)’
/opt/boost/boost/numeric/ublas/matrix_expression.hpp:5627:7: note: candidate expects 1 argument, 0 provided
```
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by reproducing the example with Boost 1.80 and 1.63, then read boost/numeric/ublas/traits.hpp, functional.hpp, and matrix_expression.hpp around the reported instantiations. Compare the failing u = u / norm_frobenius(u) expression with the working /= form; done means the reported expression compiles as it did in 1.63 without breaking the existing behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100