auto
当函数主体包含多个if constexpr
分支并且其中一个分支无条件抛出时,如何使用推断()返回类型指定函数的返回类型?
返回类型必须满足某个概念;我不能仅仅将其保留为void
。
我尝试使用std::declval
但是 g++ 静态断言“你不能使用 declval”。
问题是,除了假返回之外,有没有更好的方法来声明返回类型?
auto func()
{
if constexpr (A)
{
if (...) return std::vector<int>{}; // actually something difficult to initialize
}
if constexpr (A && C)
{
throw 5;
// fake return to declare return type - same type as if constexpr (A) above
// return std::move(std::declval<std::vector<int>>()); // static assert in std library
return std::move(*static_cast<std::vector<int>*>(nullptr)); // it works! is there any better way?
}
else return std::array<double, 5>{};
}