功能C++ 11奇怪的行为

Nik*_*hin 7 c++ pointers function-pointers c++11

为什么这行不能编译:

function<const int&(const int&, const int&)> min_ptr = min<int>;
Run Code Online (Sandbox Code Playgroud)

但这很好用:

const int &(*min_ptr)(const int&, const int&) = min<int>;
Run Code Online (Sandbox Code Playgroud)

似乎函数类是灵活且舒适的替换函数指针.但为什么这个案子不起作用?

编辑.我的代码:

#include <functional>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
    const int&(*min_ptr)(const int&, const int&) = min<int>; //It is works fine
    function<const int&(const int &, const int&)> min_f = min<int>;// Doesn't compile
    /*
       Error message:
        error: conversion from ‘<unresolved overloaded function type>’ to non-scalar type 
        ‘std::function<const int&(const int&, const int&)>’ requested function<const int&(const int &, const int&)> min_f = min<int>;
    */
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

gcc版本4.8.2, - std = c ++ 11

Yak*_*ont 9

转让给

const int &(*min_ptr)(const int&, const int&)
Run Code Online (Sandbox Code Playgroud)

也铸成min<int>了特定的签名.演员std::function没有.

 static_cast<const int &(*)(const int&, const int&)>
Run Code Online (Sandbox Code Playgroud)

std::function分配得到它的工作.

auto* min_ptr = min<int>;
Run Code Online (Sandbox Code Playgroud)

也没有工作.

min<int>需要考虑多个重载.

std::function<const int&(const int &, const int&)> min_ptr =
  [](auto&&...args)->decltype(auto){
    return min<int>(decltype(args)(args)...);
  };
Run Code Online (Sandbox Code Playgroud)

也适用于C++ 14.