除非省略“ 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的新手)。