试图引用已删除的功能,VS 2015

时间:2015-07-26 16:05:51

标签: c++ visual-studio-2015

以下用于使用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>>();

1 个答案:

答案 0 :(得分:5)

如果您看到例如this std::lock_guard constructor reference您将看到在声明中调用的复制构造函数被标记为已删除。

解决它的最简单方法是使用复制构造函数形式的初始化,但直接初始化:

std::lock_guard<std::mutex> guard(Mutex);