使用带有decltype和可变参数模板的尾随返回类型的VS2012错误

时间:2013-04-04 10:52:42

标签: c++ visual-c++ c++11

使用Visual Studio(11月12日CTP)编译某些代码时出现此错误:

1>c:\users\*\documents\visual studio 2012\projects\consoleapplication2\consoleapplication2\main.cpp(19): error C2893: Failed to specialize function template 'unknown-type locked_call(Lockable &,Callable,Args &&...)'
1>          With the following template arguments:
1>          'std::mutex'
1>          'main::<lambda_d4c412a6f5bd8d382f54c74dc3b1ff5d>'
1>          ''

以下是我的功能的简短示例:

#include <mutex>
#include <utility>

template <class Lockable, class Callable, typename... Args>
auto locked_call(Lockable &mtx, Callable fn, Args &&... args)
    -> decltype(fn(std::forward<Args>(args)...))
{
    std::lock_guard<Lockable> hold(mtx);
    return fn(std::forward<Args>(args)...);
}

int main()
{
    std::mutex mtx;

    locked_call(mtx, [&] {
    });
}

所以我的问题是:为什么这不编译? VS11都支持尾随返回类型,可变参数模板和decltype,但编译器似乎无法获取函数调用的结果类型。

0 个答案:

没有答案