#include <functional>
#include <sys/types.h>
#include <sys/socket.h>
std::function<decltype(::bind)> mockbind = ::bind;
int main()
{
}
上面的代码可以在我编译的大多数平台上工作。但在自定义g的Ubuntu 14.04 ++ - 7我得到一个错误:C++从decltype中删除noexcept返回的类型
X.cpp:7:65: error: variable ‘std::function<int(int, const sockaddr*, unsigned int) noexcept> mockbind’ has initializer but incomplete type
std::function<int(int, const sockaddr*, unsigned int) noexcept> mockbind = ::bind;
^~~~~~~~
现在,如果我手动去改的mockbind
std::function<int(int, const sockaddr*, unsigned int) noexcept> mockbind = ::bind;
类型正如预期的那样,我得到了同样的错误:
现在,如果我删除noexcept
std::function<int(int, const sockaddr*, unsigned int)> mockbind = ::bind;
它按预期进行编译。
所以问题是我可以使用一些模板代码从decltype
返回的类型中删除noexcept
并使其按预期工作。
不是'auto mockbind = :: bind'做你想要的吗? – whoan
@whoan:不,因为它不会创建一个'std :: function <>'类型的对象。如果没有它,很难将funcotors绑定到“mockbind”。 –