具有引用非类型模板参数的模板是否应该与具有自动非类型模板参数的模板模板参数相匹配?

2023-11-22

template<template<auto> class> struct A {};
template<int&> struct B {};

A<B> a;

int main() {}

所有三个编译器 MSVC、GCC 和 Clang 的最新版本都接受此代码(https://godbolt.org/z/b7Pv7Ybxv)。然而,auto无法推断出引用类型,那么为什么允许这样做呢?或者编译器在查看标准内容时是否错误地接受了它?


我混淆了上面的参数和参数。我的目的是想问

template<template<int&> class> struct A {};
template<auto> struct B {};

A<B> a;

int main() {}

这也被上述所有编译器所接受。然而,原始示例也很有趣,因为模板模板参数应该是at least与模板参数一样专业,但直观上看起来并不那么专业。


按照规则,第二个例子是可以的。让我们引用他们的话:

#3当 P 至少与模板参数 A 一样专业时,模板参数与模板参数 P 匹配...

#4模板模板参数 P 至少与模板模板参数 A 一样专用,如果给定以下对两个函数模板的重写,根据以下公式,对应于 P 的函数模板至少与对应于 A 的函数模板一样专用函数模板的部分排序规则。给定一个发明的类模板 X,其模板头为 A(包括默认参数和 require 子句,如果有的话):

  • 这两个函数模板分别具有与 P 或 A 相同的模板参数和 require 子句(如果有)。
  • 每个函数模板都有一个函数参数,其类型是 X 的特化,模板参数对应于相应函数模板中的模板参数,其中,对于函数模板的模板头中的每个模板参数 PP,有一个对应的模板参数 AA形成了。如果 PP 声明了一个模板参数包,那么 AA 就是包扩展 PP... ([temp.variadic]);否则,AA 是 id-表达式 PP。

所以我们的模板参数是template<auto> class我们的模板参数是template<int&> class。让我们发明一个类模板X:

 template <auto> class X {};

并重写为两个函数模板:

 // rewritten argument
 template<auto V> void func(X<V>);
 // rewritten parameter
 template<int& V> void func(X<V>);

第二个似乎至少与第一个一样专门:第二个模板满足的每个函数调用也将由第一个模板满足。 (据我所知,第二个模板永远无法满足,因为你无法实例化Xint&争论;不确定这是否是 IFNDR;可能不是因为程序本身不包含func模板,它们是为了检查其他模板而发明的)。


不太明显的是,根据相同的规则,第一个示例也可以。 Lety 发明了类模板X并再次重写:

 template <int&> class X {};

 // rewritten argument
 template<int& V> void func(X<V>);
 // rewritten parameter
 template<auto V> void func(X<V>);

现在,这两个模板满足完全相同的调用,因此每个模板至少与另一个模板一样专门化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有引用非类型模板参数的模板是否应该与具有自动非类型模板参数的模板模板参数相匹配? 的相关文章

  • 我应该把 try/catch 和“using”语句放在哪里? [复制]

    这个问题在这里已经有答案了 可能的重复 try catch using 正确的语法 https stackoverflow com questions 4590490 try catch using right syntax 我想try c
  • 如何使用 ASP.NET MVC 编辑多选列表?

    我想编辑一个如下所示的对象 我希望用 UsersGrossList 中的一个或多个用户填充 UsersSelectedList 使用 mvc 中的标准编辑视图 我只得到映射的字符串和布尔值 下面未显示 我在 google 上找到的许多示例都
  • 我如何知道 C 程序的可执行文件是在前台还是后台运行?

    在我的 C 程序中 我想知道我的可执行文件是否像这样在前台运行 a out 或者像这样 a out 如果你是前台工作 getpgrp tcgetpgrp STDOUT FILENO or STDIN FILENO or STDERR FIL
  • 锁定 ASP.NET 应用程序变量

    我在 ASP NET 应用程序中使用第三方 Web 服务 对第 3 方 Web 服务的调用必须同步 但 ASP NET 显然是多线程的 并且可能会发出多个页面请求 从而导致对第 3 方 Web 服务的同时调用 对 Web 服务的调用封装在自
  • 叮当错误?命名空间模板类的朋友

    以下代码在 clang 下无法编译 但在 gcc 和 VS 下可以编译 template
  • 将 OpenCV Mat 转换为数组(可能是 NSArray)

    我的 C C 技能很生疏 OpenCV 的文档也相当晦涩难懂 有没有办法获得cv Mat data属性转换为数组 NSArray 我想将其序列化为 JSON 我知道我可以使用 FileStorage 实用程序转换为 YAML XML 但这不
  • 如何以编程方式播放 16 位 pcm 数组 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含 16 位 pcm 值的短 数组 我希望能够在不添加任何标题 也不将任何文件保存到内存的情况下播放它 我知道我可能需要一个提供
  • 用于连接 DataTable 上的动态列的动态 LINQ

    我目前遇到的情况不确定如何继续 我有两个从数据库填充的数据表 我还有一个可用的列名称列表 可用于将这两个数据表连接在一起 我希望编写一组 LINQ 查询 这些查询将 显示两个数据表中的行 内部联接 用于从一个数据表更新另一个数据表 显示一个
  • 如何使用递归查找数字中的最小元素 [C]

    好的 所以我正在准备我的 C 考试 当谈到递归时我有点卡住了我是大学一年级的学生 这对我来说似乎有点困难 练习要求在给定的数字中使用递归函数我需要找到最小的元素 例如 52873 是 2 程序需要打印 2 include
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • 时间:2019-03-17 标签:c++fstream并发访问

    如果从不同的进程 线程同时访问文件会发生什么 据我所知 没有锁定文件的标准方法 只有操作系统特定的功能 就我而言 文件将被经常读取而很少写入 现在如果A打开一个文件进行读取 ifstream 并开始读取块 和B打开相同的文件进行写入 ofs
  • doxygen c++:记录由“using”声明公开的私有继承成员

    作为一个例子 我有以下课程 class A public void methodOne class B private A public Brief description using A methodOne 我还没有找到强制 doxyge
  • 无法在 C# 中为 EventArgs 分配使用派生类型的事件处理程序

    所以我有一个事件声明如下 public event EventHandler OnChangeDetected 然后我有以下处理程序被分配给该事件 myObject OnChangeDetected OnTableChanged 我的理解是
  • 使用 xslt 将 xml 转换为 xsl-fo 时动态创建超链接?

    我想使用 xsl 文件在 PDF 报告中创建标题 如果源文件包含超链接 则应将其呈现为超链接 否则呈现为纯文本 例如 我的 xml 如下所示 a href http google com target blank This is the h
  • 浮点字节序?

    我正在为实时海上模拟器编写客户端和服务器 并且由于我必须通过套接字发送大量数据 因此我使用二进制数据来最大化可以发送的数据量 我已经了解整数字节顺序以及如何使用htonl and ntohl为了规避字节顺序问题 但我的应用程序与几乎所有模拟
  • Linq.Select() 中的嵌套表达式方法调用

    I use Select i gt new T 每次手动点击数据库后将我的实体对象转换为 DTO 对象 以下是一些示例实体和 DTOS 用户实体 public partial class User public int Id get set
  • 无法识别解决方案文件夹中的 Visual Studio 2017 Nuget.config

    我在使用 Visual Studio 2017 时遇到问题 新的解决方案不断引用 C Users yopa AppData Roaming NuGet Nuget config 中意外位置的 Nuget config 文件 我已将 nuge
  • 将 char 绑定到枚举类型

    我有一段与此非常相似的代码 class someclass public enum Section START MID END vector section Full void ex for int i 0 i section
  • 使用 C# 动态创建按钮并按预定义的顺序放置它们

    NET 4 5 C 创建 Windows 窗体 我想动态创建和添加按钮并为其分配单击事件 但希望它们以特定的方式动态放置 就像图像一样 我的问题是如何以上述方式动态放置按钮 即 4x4 格式 一行 4 个按钮 4 列 但行数不受限制 是否可
  • 为什么表达式 a = a + b - ( b = a ) 在 C++ 中给出序列点警告?

    以下是测试代码 int main int a 3 int b 4 a a b b a cout lt lt a lt lt a lt lt lt lt b lt lt b lt lt n return 0 编译此命令会出现以下警告 gt g

随机推荐

  • SFINAE 有符号和无符号的区别

    我有将不同算术类型转换为半精度浮点类型的函数 只是一个uint16 t在最低级别 我对整数和浮点源类型有不同的函数 使用 SFINAE 和std enable if template
  • Xcode 卡在“您的应用程序正在上传”

    我在将应用程序从 Xcode 提交到 App Store 时遇到问题 我已经完成了与我的项目相关的所有工作 并且它在我的 iPhone 和 iPad 上运行良好 但当我提交项目时 我面临着一个巨大的问题 存档后首先我完成了验证 现在 我在管
  • 无密码取消工作簿保护

    我有一个流行的 VBA 代码来取消对工作表的保护 但我仍然遇到工作簿受到保护的问题 Sub PasswordBreaker Breaks worksheet password protection Dim i As Integer j As
  • Blazor 清理 MarkupString

    我正在尝试清理 MarkupString 的内容 实际上我创建了这个 基于https github com dotnet aspnetcore blob 574be0d22c1678ed5f6db990aec78b4db587b267 sr
  • GCC 4.4.1 是否因不接受构造函数初始化程序中的注入类名而出现错误?

    GCC 4 4 1 拒绝找到我的注入类名在一个构造函数初始化器 template
  • 如何在等待服务器进程时使用 jQuery 和 PHP 制作进度条?

    当 Google 提供许多指向 Stackoverflow 的准确结果时 过去很容易找到我的问题的解决方案 但是 我没有找到解决这个问题的方法 如果你们中的任何人有建议我应该去哪里解决这个问题 请给我答案的链接 情况是我想从数据库中搜索索引
  • 授权属性生命周期

    有人可以解释为什么授权属性生命周期似乎是相对于它所应用的类或方法进行管理的吗 这与相对于请求生命周期进行管理相反 如果我在类级别装饰控制器 则授权属性构造函数只会在对同一控制器的多个请求中被调用一次 如果我装饰每个控制器方法 那么我会为每个
  • Git 无法比较或合并 utf-16 编码的 .cs 文件

    我和一个朋友同时处理同一个 cs 文件 当存在合并冲突时 git 指出存在冲突 但该文件没有加载通常的 HEAD gt gt gt 内容 因为 cs 文件是二进制文件 因此 我们在 gitattributes 文件中添加了许多内容 cs 文
  • Ramda 建议从稍微嵌套的数组中删除重复项

    我们正在尝试利用 Ramda 来避免一些暴力编程 我们有一个对象数组 如下所示 id 001 failedReason 1000 id 001 failedReason 1001 id 001 failedReason 1002 id 00
  • 空闲计时器时间到期后应用程序不休眠

    据我了解 idleTimerDisabled 设置默认设置为 否 虽然 当我运行我的应用程序并等待它超时并睡眠时 它没有超时 也没有睡眠 我已经进入我的 AppDelegate 并将其手动设置为 否 以尝试强制其睡眠 但仍然没有成功 我正在
  • OpenGL 统一缓冲区 std140 布局、驱动程序错误还是我误解了规范?

    OpenGL 规范是谎言 或者这是一个错误 参考 std140 的布局 具有共享的统一缓冲区 它指出 GLSL 编译器使用表 L 1 中显示的规则集来 std140 合格的统一块中的布局成员 的偏移量 块中的成员根据块的大小进行累积 块中的
  • 删除/替换国际字符

    我正在用 C 创建一个小应用程序 以根据从 SQL 查询传递的信息搜索文件名 在从 SQL 查询传递的数据中 有时 由于国际访问者访问我的公司 可能会出现多个实例 名称中包含国际字符 我们的文件名采用英文字母 没有特殊字符 我正在尝试找到一
  • 从匿名内部类设置外部变量

    有什么方法可以从 Java 中的匿名内部类访问调用者范围的变量吗 这是示例代码以了解我需要什么 public Long getNumber final String type final String refNumber final Lon
  • 从私钥导出 ECDSA 公钥

    我试图从私钥生成公共 ECDSA 密钥 但我没有在互联网上找到关于如何执行此操作的太多帮助 几乎一切都是为了从公钥规范生成公钥 但我不知道如何获得它 到目前为止 这是我整理的内容 public void setPublic throws G
  • 用Python计算有效数字?

    Python 有没有办法计算 double float etc 中的有效数字 我没有看到一个简单的方法来做到这一点 但我希望它能在图书馆中 提前致谢 您可能对任意精度浮点库感兴趣 例如 http code google com p mpma
  • OpenFire/XMPP 503 服务不可用错误(使用 iOS XMPPFramework 的 XEP-0065)

    Problem 我正在尝试使用 iOS XMPPFramework 和 OpenFire 服务器进行 TURN 连接 XEP 0065 我希望能够发送和接收文件 但是 我收到 503 服务不可用错误 Note 我的代码的基础来自以下教程 h
  • 具有自定义距离度量的“KD 树”

    我想使用 KDtree 这是最好的选择 其他 KNN 算法对于我的项目来说不是最佳的 与自定义距离度量 我在这里检查了类似问题的一些答案 这应该有效 但没有 根据定义 距离矩阵是对称的 array 1 0 5 5 0 3 2 0 1 0 0
  • 对表进行约束以限制要存储的记录数

    我有一个数据库 有两个表Ads and Images 有一个主键adid in Ads作为外键的表Images table 我想在表上创建一个约束Images不超过5个adid可以存储在Images table 我需要知道这种类型的约束被称
  • 所有台式机/笔记本电脑显示器的方向都与 iPad 等设备上的横向方向相似吗?

    所有台式机 笔记本电脑显示器的方向都与 iPad 等设备上的横向方向相似吗 之间有什么区别吗 body background red media only screen and orientation landscape body back
  • 具有引用非类型模板参数的模板是否应该与具有自动非类型模板参数的模板模板参数相匹配?

    template