libstdc ++中允许的不兼容的函数类型?

时间:2015-06-11 13:13:35

标签: c++ c++11

我正在编译一个简单的(可能是错误的)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 ++标准中函数类型转换的描述?

1 个答案:

答案 0 :(得分:1)

我不知道为什么你认为func的类型应该是std::function<void*()>。毕竟,您将func_定义为std::function<void()>func_的定义决定了它的类型。

您得到的错误与您是否可以忽略func的返回类型,原始函数指针(您选择的名称相当混乱TBH)的问题有关。这应该是可能的。