以下用于使用 Visual Studio 2013 进行编译,但现在在 Visual Studio 2015 中出现错误“试图引用已删除的函数”。
template<typename... Args>
void operator()(Args && ... args)
{
auto guard = std::lock_guard<std::mutex>(Mutex);
{
Clean();
for (auto const & listener : Listeners)
{
if(auto locked = std::get<0>(listener).lock())
std::get<1>(listener)(args...);
}
}
}
错误是第一条语句:
auto guard = std::lock_guard<std::mutex>(Mutex)
Mutex 只是一个 std::mutex。任何人都可以阐明为什么现在这是一个错误吗?
编辑:我也在这里用这行代码得到它:
auto converter = std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>>();
最佳答案
如果你看到例如this std::lock_guard
constructor reference您会看到在您的声明中调用的复制构造函数被标记为已删除。
解决它的最简单方法是不使用复制构造函数形式的初始化,而是直接初始化:
std::lock_guard<std::mutex> guard(Mutex);
关于c++ - 尝试引用已删除的函数,VS 2015,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31639070/