【发布时间】:2015-06-11 13:13:34
【问题描述】:
我正在编译一个简单的(可能是错误的)C++ 文件:
// file test_function.cpp
#include <functional>
void foo()
{
void* (*func)() = nullptr;
std::function<void()> func_(func);
}
我认为func_的类型应该是std::function<void*()>。不出所料,clang++ with libc++ 报错:
$ clang++ -std=c++14 -c -stdlib=libc++ test_function.cpp
test_function.cpp:6:27: error: no matching constructor for initialization of 'std::function<void ()>'
std::function<void()> func_(func);
^ ~~~~
但是,带有 libstdc++ 的 g++ 和 clang++ 没有给出错误:
$ clang++ -std=c++14 -c -stdlib=libstdc++ test_function.cpp
$ g++ -std=c++14 -c test_function.cpp
情况正常吗? C++标准中有关于函数类型转换的说明吗?
【问题讨论】: