使用点后模板函数的特化将破坏编译

2023-11-30

考虑下一个例子:

#include <iostream>

template< int a >
void foo();

int main(int argn, char* argv[])
{
    foo<1>();
}

template<>
void foo<1>()
{
    std::cout<<1<<std::endl;
}

编译失败并显示以下错误消息:

rg.cpp:12: error: specialization of ‘void foo() [with int a = 1]’ after instantiation

标准中的哪一段解释了此错误?

PS:我知道如果我将函数定义移到 main 前面将使错误消失。


我认为那是未定义的行为根据标准。在 UB 的情况下,工具链可以做什么没有限制,生成编译器错误是更友好的可能性之一。


Section [temp.spec],14.7p5 说

对于给定的模板和给定的一组模板参数,

  • 显式实例化定义在程序中最多出现一次,
  • 一个显式专业化在程序中最多定义一次(根据 3.2),并且
  • 显式实例化和显式专业化声明都不应出现在 除非显式实例化遵循显式专业化的声明。

不需要实施来诊断是否违反此规则。

Section [temp.expl.spec]14.7.3p6 说:

如果模板、成员模板或类模板的成员被显式专门化,则该专业化应在第一次使用该专业化之前声明,这将导致发生隐式实例化,在发生这种使用的每个翻译单元中;无需诊断。


您的程序违反了这些要求。

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

使用点后模板函数的特化将破坏编译 的相关文章

  • 具有相同参数类型但具有不同常量限定符的 std::vector 的转换

    问题很简单 静态转换 或其他一些转换 通常是安全的 std vector lt Foo gt to std vector lt const Foo gt 就二进制而言 我不明白为什么本机类型会有所不同 毕竟const是一种语言约束 不应影响
  • 是否有可能劫持标准输出

    我正在尝试使用 C 重定向 Windows XP 上已运行进程的标准输出 我知道如果我自己生成进程 我可以做到这一点 但对于这个应用程序 我更喜欢一个 监听器 我可以附加到另一个进程 这在纯 Net 中可能吗 如果不可能 在 Win32 中
  • 使用 Json.NET 序列化子类

    我正在尝试使用 Json NET 序列化子类 生成的 json 包含超类的序列化属性 但是not子类对象的属性 这似乎与我发现的一个问题有关这里就这样 https stackoverflow com q 5863496 498969 但必须
  • 深拷贝和动态转换 unique_ptr

    假设我有一个如下所示的类 class A virtual A class B public A class C public A 我还有一个 unique ptr 向量 它是这样声明的 std vector
  • 将字符串作为 PChar 从 CSharp 传递到 Delphi DLL

    我正在尝试将字符串从 C 传递到 Delphi 构建的 DLL Delphi DLL 需要 PChar 这是Delphi导出 procedure DLL Message Location PChar AIntValue integer st
  • 平滑手绘曲线

    我有一个允许用户绘制曲线的程序 但这些曲线看起来不太好 它们看起来摇摇欲坠 而且是手绘的 所以我想要一种能够自动平滑它们的算法 我知道平滑过程中存在固有的模糊性 因此它不会每次都完美 但这种算法似乎确实存在于多个绘图包中 并且它们工作得很好
  • 最新 .Net MongoDb.Driver 的连接问题

    我创建了一个 MongoLab 沙箱数据库 我与 MongoChef 连接 效果很好 我通过 Nuget 安装了 MongoDB Driver 2 2 2 我编写了一些简单的 C 演示代码 但就是无法使其工作 连接字符串是直接从 Mongo
  • ASP.NET - 在 RenderContent 调用中将事件处理程序添加到 Repeater 内的 LinkBut​​ton

    我有一个加载自定义用户控件的 Sharepoint WebPart 用户控件包含一个 Repeater 而 Repeater 又包含多个 LinkBut ton 在 Web 部件的 RenderContent 调用中 我有一些用于添加事件处
  • 无法加载程序集问题

    我收到以下错误 无法加载程序集 错误详细信息 System BadImageFormatException 无法加载文件或程序集 文件 或其依赖项之一 该程序集是由比当前加载的运行时更新的运行时构建的 无法加载 该程序集是使用 Net Fr
  • Linq 合并列表

    我的课 public class Foo public int A get set public List
  • 应用程序处于中断模式。您的应用程序已进入中断状态,

    我发现自己遇到了同样的问题here https stackoverflow com questions 36204009 disable break mode page in vs2015 我在 dll 中使用 Windows 窗体 这是针
  • 处理“未找到细胞”。 Excel 中的错误

    我正在使用 Excel VSTO 应用程序并使用以下代码在工作表中查找错误单元格 Excel Range rngTemp Excel Range rngErrorRange Excel Worksheet Sheet1 Excel Work
  • 如何让XmlReader读取C#中的属性?

    我有一个 XML Stream 其中包含以下 XML 内容
  • 我在使用 ado.net 时收到错误 Argument 2 may not be pass with ref keywords

    int t 0 cmd Parameters AddWithValue Res ref t 我在第二行收到错误 参数 2 不能与 ref 关键字一起传递 您只能通过引用传递参数ref if the 范围 is a ref参数也是如此 Add
  • 我可以将 UseCSharpNullComparisonBehavior 用于单个查询吗?

    我有一个查询 该查询曾经是存储过程 现已转换为 EF 查询 现在已经超时了 使用 SQL Profiler 我可以看到生成的 SQL 的唯一区别是 EF 转变的新行为entity Property value into entity Pro
  • Gremlin.net 文本包含等效项

    我正在使用 Gremlin net 库连接到 janus 图形服务器 我使用 cassandra 和弹性搜索进行数据存储和索引 在我使用的 gremlin 语言和 gremlin 控制台中文本包含在属性的文本中进行搜索 我正在使用混合索引
  • 连接到没有元数据的网络服务

    我想连接到此网络服务 https training api temando com schema 2009 06 server wsdl https training api temando com schema 2009 06 serve
  • C 变量声明的效率 [重复]

    这个问题在这里已经有答案了 例如 在 C 中声明一个变量需要多长时间int x or unsigned long long var 我想知道它是否会让我的代码在类似的事情中更快 for conditions int var 0 code 这
  • 使用多态对象数组进行 JSON 反序列化

    我在涉及多态对象数组的 JSON 反序列化方面遇到问题 我已经尝试过记录的序列化解决方案here https stackoverflow com questions 5186973 json serialization of array w
  • 将一个 IEnumerable 拆分为多个 IEnumerable

    我是 linq 新手 我需要根据指示器将 Couple string text bool Indicator 类型的 IEnumerable 拆分为多个 IEnumerable 我尝试使用skipWhile 和 TakeWhile 但没有找

随机推荐

  • stl 中的错误,系列少于两个周期(错误?)

    I have 两年的月度数据 but stl 似乎至少需要两年零一个月 这是两个简单的例子 示例 1 返回 stl x 周期性 中的错误 系列不是周期性的或周期少于两个 dat 24 lt cumsum rnorm 24 x 24 lt t
  • 在 R 上的 igraph 中查找大型数据集中的根顶点

    假设您有一个根据边列表创建的图 并且有数百个顶点 我想要做的是确定所有后续顶点都与之相关的初始顶点集 例如母亲或家谱 这是一个代表 冰岛 的数据集 即从冰川上脱落并漂浮在海上的大型平板状冰片 初始裂缝代表根节点 随后的顶点是对这些较小碎片
  • 使用参数调用宏:Python win32com API

    我想做的是从我的 python 代码中调用宏 这是来源示例 xl win32 gencache EnsureDispatch Excel Application xl Visible 1 xl Workbooks Open C Progra
  • gsub 无法删除 R 中的空括号

    我在 R 中有以下字符串 A lt A 23 56 hh 我想得到以下输出 A 23 56 hh 我尝试了以下代码 B lt gsub pattern replacement x A 这没有产生预期的结果 我怎样才能完成同样的任务 Try
  • 在 Javascript 中获取对象任意级别的元素

    鉴于以下情况 var a JSON parse fst data1 snd ind2 data2 var index fst var res a index res data1 var index2 var res2 a index2 re
  • Microsoft 2010 Visual C,安装FLTK

    MSV2010C 的 FLTK 问题 我正在关注 编程 使用 C 的原理和实践 尝试让 FLTK 正确运行时遇到了麻烦 我为自己工作过一次 然后就再也没有了 我已详细说明了下面所采取的步骤 如果有人能注意到任何奇怪的地方 我将不胜感激 我的
  • 成功使用后几​​天后“未找到”RVM

    我几天前安装了RVM 运行得很好 几天后 现在 我猜是在重新启动几次之后 shell 说它就像没有安装一样rvm not found虽然我可以在我的眼中看到这一切 rvm文件夹 还有一个scripts文件夹到那个 我尝试重新运行安装脚本 但
  • 如何为Rails 3站点中的每个页面设置不同的背景图像?

    我正在尝试弄清楚如何为 Rails 3 站点的每个页面设置不同的背景图像 我怎样才能做到这一点 而不必重复每个页面的 css 文件中的内容 application html erb div class container div class
  • 如何阻止 Eclipse 编辑器在 RCP 中关闭

    我正在开发基于 Eclipse 的 RCP 我们需要防止用户关闭打开的编辑器之一 期望的行为是 用户单击编辑器窗口中的 X 或 CTRL W 弹出一个对话框 显示 如果您关闭此编辑器 您的活动将停止 您想这样做吗 如果他们点击 是 它就会关
  • 如何在 UWP 中写入只读 sqlite 文件

    所以我是 UWP 新手 在完成连接到 sqlite 后tutorial 我对代码进行了一些修改以尝试新事物 我没有在本地文件夹中创建并保存 sqlite 文件 而是将文件目录更改为安装位置 创建了一个文件夹 data 并在其中添加 sqli
  • 我想引用另一个 python 脚本中的变量

    一个变量AA is in aaa py 我想在我的其他 python 文件中使用这个变量bbb py 我如何访问这个变量 您正在寻找modules In aaa py AA Foo In bbb py import aaa print aa
  • CPU Arch 的交叉编译或原生编译

    编写依赖于 CPU 架构的软件时 例如在 x86 上运行的 C 代码或在 ARM CPU 上运行的 C 代码 通常有两种方法可以编译此代码 要么交叉编译到 ARM CPU 架构 例如 如果您在 x86 系统上进行开发 要么将代码复制到本机架
  • H2161 警告:重复资源:类型 10 (RCDATA)

    我尝试将资源文件包含在我的包中 当我构建包时 我读到了这个警告 dcc32 Conseil H2161 Warning Duplicate resource Type 10 RCDATA ID PLUSUTILISEVOIR File Pr
  • Android 删除参数以匹配“intent()”

    我正在尝试开始第二个活动 但代码出现错误 import android os Bundle import android content Intent import android app Activity import android w
  • UIAlertView 第一个被弃用的 iOS 9

    我尝试了多种方法来使用 UIAlertController 而不是 UIAlertView 我尝试了多种方法 但无法使警报操作发挥作用 这是我的代码 在 IOS 8 和 IOS 9 中运行良好 但显示为已弃用的标志 我尝试了下面的优雅建议
  • 推荐在 java 中使用 WMI 的库/方法? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 嘿伙计 我有一个相当大的商业项目 因此付费许可始终是一种选择 该项目正在迁移到 Windows 空间 并且我计划使用 WMI 进行大量轮询 这是一个
  • 如何从现有代码创建 WordPress 短代码?

    我有这段代码来显示所有帖子的类别和第一篇帖子的缩略图 ul li li ul
  • 将具有常量值的列添加到pandas数据框中[重复]

    这个问题在这里已经有答案了 给定一个数据框 np random seed 0 df pd DataFrame np random randn 3 3 columns list ABC index 1 2 3 df A B C 1 1 764
  • 在静态方法中引用类而不使用其名称

    如何在 JavaScript 中不使用类名本身的情况下从静态方法引用类 类似于 PHP 的self and self method name 例如 在下面的类中 我如何引用该方法foo和方法bar里面的foobar method 不使用 F
  • 使用点后模板函数的特化将破坏编译

    考虑下一个例子 include