在未评估的上下文中推导出自动函数的返回类型时编译失败

时间:2016-11-28 20:53:16

标签: c++ c++11 gcc template-meta-programming

我有一些机制get_return_type可用于未评估的上下文,以推断函数的返回类型,而无需提供参数类型:

template <typename Result, typename... Args>
Result get_return_type(Result (*)(Args...));

int example(double, char, bool);

// will be int
using result_type = decltype(get_return_type(example));

但是,如果该函数是模板,并且其返回类型为auto,则所有版本的GCC I尝试都无法编译。 Clang工作得很好。

namespace TemplatedFunctionReturningAutoTest
{
    template <typename T>
    auto foo(T v) { return v; }

    // GCC complains that Result type cannot be deduced in
    // template substitution of get_return_type
    static_assert(std::is_same<int, decltype(get_return_type(foo<int>))>::value, "");
}

这是关于godbolt(gcc 6.2):https://godbolt.org/g/iIh6TU

如果你切换到clang 3.x它工作正常!感觉GCC不愿意实例化函数体以找出它的返回类型。

这是一个GCC错误,还是标准中有什么东西阻止它工作?

0 个答案:

没有答案