相关疑难解决方法(0)

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

请考虑以下简化示例,也可以在https://godbolt.org/g/Et56cm查看:

#include <utility>

template <class T> struct success
{
  T value;
  constexpr success(T &&v)
      : value(std::move(v))
  {
  }
  constexpr success(const T &v)
      : value(v)
  {
  }
};
template <> struct success<void>
{
};
template <class T> success(T /*unused*/)->success<T>;
success()->success<void>;

int main(void)
{
    auto a = success{5};        // works
    auto b = success{};         // works
    auto c = success{"hello"};  // works
    auto d = success(5);        // works
    auto e = success();         // FAILS!
    auto f = success("hello");  // works …
Run Code Online (Sandbox Code Playgroud)

c++ templates template-argument-deduction c++17

3
推荐指数
1
解决办法
235
查看次数