当前位置: 首页 > 知识库问答 >
问题:

不是非类型参数包,计算结果为“void...”违法?

姬锐
2023-03-14
template <typename T,
          typename std::enable_if<std::is_integral<T>::value>::type...>
void test(T) {}
#include <type_traits>

template < typename C >
using enable_if_t = typename std::enable_if<C::value>::type ;

template < typename T, enable_if_t<std::is_integral<T>>... >
void test(T){} // #1

template < typename T, enable_if_t<std::is_floating_point<T>>... >
void test(T){} //#2

int main()
{
   test(0);   // calls #1
   test(0.0); // calls #2
   return 0;
}

共有1个答案

充高扬
2023-03-14

在另一个问题的上下文中进行了大量搜索后,我发现标准中有一点明确表示这是非法的:

[温度]/8.3:

如果:...一个变量模板的每个有效专门化都需要一个空模板参数包,则程序格式不正确,不需要诊断

 类似资料:
  • OpenGL定义了C函数来管理资源。我编写了一个简单的包装器来以RAII的方式处理它们。函数对类似于和。但是,也有一些函数对适用于资源数组,例如和。对于前者,我编写了一个简单的类来完成这项工作,对于后者,我编写了另一个处理数组的类。然而,我注意到有时我只使用一个缓冲区或纹理,在那里我不必承担向量的费用,我想如果发布函数在开始时采用大小参数,我会专门化类析构函数,但是... 对于上述SSCCE g树

  • 问题内容: 我正在玩Java 8,以了解如何发挥一流公民的作用。我有以下片段: 我想做的是使用方法引用将方法传递给方法。要编译会产生以下错误: 编译器抱怨。我不知道如何在代码的签名中指定函数接口的类型。我知道我可以简单地改变的返回类型来,然后返回。但是,在某些情况下,无法更改我想传递到其他地方的方法。有没有简单的方法可以重复使用? 问题答案: 您正在尝试使用错误的接口类型。在这种情况下,函数类型是

  • 在写这个问题之前,我看了以下链接: 未处理的异常:InternalLinkedHashMap 守则: 我只是不知道为什么错误存在,所以请帮帮我。谢谢你! 编辑:如果有助于解决问题,我可以将数据更改为限制

  • 当我将值从主页传递到源页面时,它显示了一个错误:参数类型“Future”无法分配给参数类型“uluFunction()”。(argument_type_not_assignable[strong text]lib\home.dart:15) 我哪里做错了?? 主页- 下面的页面是我想使用主页值的地方-

  • 在下面的代码中,为什么模板函数的显式扩展无法编译,而条形扩展却成功编译?实时链接-https://godbolt.org/z/o8Ea49KEb 请注意,这两个函数的主体中都使用了模板参数T2,唯一的区别是已手动替换条形图的函数参数。 这个问题是在阅读了std::c条件-无效参数类型“无效”后提出的,即使在测试“无效”并试图简化问题时也是如此。

  • oracle java教程指出:(我强调) 表达式是由变量、运算符和方法调用组成的构造,它们根据语言的语法构造,并计算为单个值。 给定一个函数 方法调用表达式< code>doNothing()的值是什么? 我想知道这一点,因为在我的理解表明这个函数不返回任何东西。