Dado um vetor de números complexos, quero obter seus valores absolutos:
std::vector<std::complex<double>> in; // filling omitted
std::vector<double> out(in.size());
std::transform(in.begin(), in.end(), out.begin(),
&std::abs<std::complex<double>> // (1)
// [](std::complex<double> z){ return std::abs(z); } // (2)
);
No meu entendimento, as linhas (1) e (2) deveriam ter o mesmo efeito.
No entanto, enquanto a linha (2) é compilada corretamente, a linha (1) produz um erro:
../../../include/c++/12/bits/stl_algo.h:4263:31: error: cannot convert 'std::complex<double>' to 'double' in assignment
4263 | *__result = __unary_op(*__first);
| ~~~~~~~~~~^~~~~~~~~~
| |
| std::complex<double>
Por que recebo esse erro? Por que a função anônima é necessária aqui?