Я играл с указателями на функции против std :: function
и столкнулся со следующей проблемой.
Давайте рассмотрим следующий код:
#include <cmath>
#include <functional>
// g++ -std=c++17 SF.C -o SF
// clang++ -std=c++17 SF.C -o SF
int main()
{
typedef double (*TpFunctionPointer)(double) ;
TpFunctionPointer pf1 = sin; // o.k.
TpFunctionPointer pf2 = std::sin; // o.k
TpFunctionPointer pf3 = std::riemann_zeta; // o.k
std::function< double(double) > sf1( sin ); // o.k
std::function< double(double) > sf2( std::sin ); // fails
std::function< double(double) > sf3( std::riemann_zeta ); // fails
}
Компиляция с g++ v8.2
или clang v7.0
отлично работает для указателя функции pf1, pf2, pf3 и для sf1.
Однако для sf2 и sf3 я получаю довольно длинные сообщения об ошибках, например ::
SF.C:17:47: error: no matching function for call to ‘std::function<double(double)>::function(<unresolved overloaded function type>)’
std::function< double(double)> sf2( std::sin ); // fails
Это предполагаемое поведение?
Разве sf2
и sf3
не должны быть в порядке?