我正在编译一个简单的(可能是错误的)C ++文件:
// file test_function.cpp
#include <functional>
void foo()
{
void* (*func)() = nullptr;
std::function<void()> func_(func);
}
我认为func_的类型应为std::function<void*()>
。正如所料,使用libc ++的clang ++会出错:
$ 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 ++标准中函数类型转换的描述?
答案 0 :(得分:1)
我不知道为什么你认为func
的类型应该是std::function<void*()>
。毕竟,您将func_
定义为std::function<void()>
。 func_
的定义决定了它的类型。
您得到的错误与您是否可以忽略func
的返回类型,原始函数指针(您选择的名称相当混乱TBH)的问题有关。这应该是可能的。