递归可变模板安装失败
Recursive variadic template instation fails
在下面的例子中,具有三个int的实例化与第二个函数模板一起工作,而不是与第一个函数模板一起工作,这是什么原因呢?附加:对于State1/State1类型,它也不能工作。
struct State1{};
struct State2{};
#if 0
template<typename none = void>
constexpr void f()
{
}
template<typename First, typename... Rest>
constexpr void f()
{
f<Rest...>();
}
#else
template<typename none = void>
constexpr void f()
{
}
template<int First, int... Rest>
constexpr void f()
{
f<Rest...>();
}
#endif
void test()
{
f<1, 2, 3>();
// f<State1, State2>();
}
谢谢你的提示!
第一种情况的问题是,当您传递单个模板参数(参数包可以为空)时,两个模板专门化都匹配,因此重载集包含多个候选模板。您可以使用SFINAE来使第二个实例化失败:
#include <type_traits>
struct State1{};
struct State2{};
template<typename none = void>
constexpr auto f() -> void
{
}
template<typename First, typename... Rest>
constexpr auto f() -> std::enable_if<sizeof...(Rest), void>::type
// This will not instantiate when the parameter pack is empty
// And the overload set will contain only the candidate above
{
f<Rest...>();
}
int main()
{
f<State1, State2>();
return 0;
}
相关文章:
- 安装opencv失败-粘贴CMakeError.log的内容
- Mongodb C驱动程序在Windows上安装失败
- vtk msvc14 安装失败时生成安装
- 检查日志文件以找出 vcredist.exe 安装失败的原因
- 如果应用程序从安装选项启动,则加载库失败,错误代码为 126
- 将库安装到编译中未包含的路径后,编译失败
- gRPC 安装失败"make"
- WebAssembly EMSDK安装失败
- vcpkg 安装失败,并显示"SSL 连接错误"
- AC_CHECK_HEADER失败如果标题安装路径中有API
- 加速安装失败:系统找不到指定的路径
- Pygraphviz安装失败,错误代码为1083无法打开文件graphviz/cgraph.h:没有这样的文件或目录
- 明吉安装失败
- Qt 5.4.0 在 libGL.so.1 上安装失败,但 libgl-dev 和 ibglu-dev 已经安装
- Boost安装失败:找不到-lrt
- 递归可变模板安装失败
- Vikit_common -安装失败- Raspberry Pi 2b
- Pip安装失败,在fastlz模块上退出代码2 /错误代码1
- 断点安装失败:中断失败
- Linux下c++ Mongodb驱动v2.2 scons安装失败