std :: function <void(std :: string&)noexcept =“”>编译器错误,想要保留noexcept(C ++ 17)

时间:2018-10-22 16:33:59

标签: c++ c++17

除非省略“ noexcept”,否则以下代码将失败。是否可以保留DESCRIPTION并解决此错误?

错误:

noexcept

代码:

> functional(1479) : error C2027 : use of undefined type 'std::_Get_function_impl<_Fty>'
with
[
    _Fty = void(std::string &) noexcept
]
> functional(1479) : note : see declaration of 'std::_Get_function_impl<_Fty>'
with
[
    _Fty = void(std::string &) noexcept
]
> main.cpp(5) : note : see reference to class template instantiation 'std::function<void (std::string &) noexcept>' being compiled
> functional(1480) : error C2504 : 'type' : base class undefined
[more errors]
> error C2664: 'void bar(functor_t)': cannot convert argument 1 from 'void (__cdecl *)(std::string &) noexcept' to 'functor_t'

这似乎是VC ++及其当前版本的std库的问题。除了删除#include <functional> #include <string> using namespace std; typedef function<void(string&) noexcept> functor_t; void bar(functor_t f) { string args{ "a" }; f(args); } void foo(string& args) noexcept { } int main() { bar(foo); } 之外,还有其他解决方法可以使此代码在Visual C ++上适用于x64吗?

我正在使用Visual Studio版本15.8.7,Windows SDK版本10.0.17134.0和vc \ tools \ msvc \ 14.15.26726(所有最新版本)。

谢谢。

编辑#1:

功能的第1631行:

noexcept

上述代码似乎与x64(?)中的签名不匹配。谁能确认这一点(我是C ++ 17的新手)。

0 个答案:

没有答案