C ++ 17模板推导指南不用于空参数集?

时间:2017-07-19 16:13:50

标签: c++ templates c++17 template-deduction

考虑以下简化示例,也可以在iteration_returns_combined_after_loop_view查看:

success()

令我感到惊讶的是,success{}无法编译,success() -> success<void>却无法编译。我提供了模板扣除指南success(),因此我认为pip install pdfrw 也可以正常使用。

这是C ++ 17标准中的预期行为,还是我遗漏了什么?

1 个答案:

答案 0 :(得分:6)

这是一个gcc错误(刚刚提交81486)。在推导success()时,我们合成了一个包含以下内容的重载集:

// from the constructors
template <class T> success<T> foo(T&& ); // looks like a forwarding reference
                                         // but is really just an rvalue reference
template <class T> success<T> foo(T const& );

// from the deduction guides
template <class T> success<T> foo(T ); // this one is a bit redundant
success<void> foo();

并确定返回类型,就好像它被调用为foo()一样,这肯定会给你一种success<void>类型。它不是一个错误。