模板依赖 false

2024-03-08

我有一个不能直接使用的类模板,只允许专业化。我想用static_assert显示有意义的错误消息。 我不能只打字static_assert(false, "error"); since false不依赖于值,即使从未使用过模板,编译器也可能会显示错误消息。

我的解决方案:

template<class>
struct AlwaysFalse : std::false_type{};

#define DEPENDENT_FALSE(arg) AlwaysFalse<decltype(sizeof(arg))>::value

template<class T>
struct Foo{
    static_assert(DEPENDENT_FALSE(T), "You must use specialization!");
};

template<int i>
struct Bar{
    static_assert(DEPENDENT_FALSE(i), "You must use specialization!");
};

但我不确定实现DEPENDENT_FALSE。因为MSVCdoesn't http://rextester.com/OCOBN40973 treat sizeof(arg)作为模板相关表达式(与海湾合作委员会不同 http://rextester.com/TEBIO81232), but decltype(sizeof(arg)) is fine http://rextester.com/OGJFG98733.

有人可以用标准来解释这种行为吗?它是便携式的吗?


This:

#define DEPENDENT_FALSE(arg) AlwaysFalse<decltype(sizeof(arg))>::value

实际上并非如此依赖的. decltype(sizeof(arg))总是size_t,它实际上并不取决于arg无论如何(更广泛地说,这是一个表达式列表 http://eel.is/c++draft/temp.dep#expr-4永远不依赖于类型)。由于它不依赖,编译器完全能够看到DEPENDENT_FALSE(T) is false然后触发它static_assert.

你想要的只是:

#define DEPENDENT_FALSE(arg) AlwaysFalse<decltype(arg)>::value

也就是说,删除sizeof。现在这个is依赖。


这不适用于int直接,因为这又不会依赖(decltype(i)只是int,我们现在需要一些依赖于值的东西)。为此,您可以将其包装在一个整数常量中:

template<class T>
struct Foo{
    static_assert(AlwaysFalse<T>::value, "You must use specialization!");
};

template<int i>
struct Bar{
    static_assert(AlwaysFalse<std::integral_constant<int, i>>::value, "You must use specialization!");
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模板依赖 false 的相关文章

  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P

随机推荐

  • 向用户报告进度时如何编写最简洁的代码?

    在过去的几个月里 我一直在努力想出一些干净的代码来向用户报告进度 一切似乎总是归结为 ReportProgress Starting Task 1 doTask1 ReportProgress Task 1 is done ReportPr
  • WPF DataGrid 控件模板

    我正在尝试自定义 WPF 4 0 DataGrid 并需要其控件模板的列表 也是嵌套 DataGridColumnHeadersPresenter PART ColumnHeadersPresenter 的控件模板 我发现this http
  • php pdo 绑定参数不起作用[重复]

    这个问题在这里已经有答案了 我正在使用以下 php pdo 代码将数据插入 mysql 数据库 插入成功 但是 更新的数据库将字符串文字 a b 显示为各自字段中的值 怎么了 data array array a gt John b gt
  • 使用谷歌移动视觉 API 检测第一个条形码并将数据发送到另一个活动

    您好 我在 github 上检查了来自 google 的条形码阅读器示例 我试图让条形码检测器检测第一个条形码 只有一个 当它检测到时 它将解码的条形码发送到另一个活动 Mabye 我错了 但我需要输入这段代码 BarcodeGraphic
  • onConnectionFailed 给出 SIGN_IN_REQUIRED(4)

    我正在开发一个 Android 应用程序 我想在其中使用 Google API 为此我导入了谷歌播放服务库项目 我正在关注这个link https developers google com mobile android getting s
  • 将 string 转换为 unsigned int 返回错误的结果

    我有以下字符串 sThis 2154910440 unsigned int iStart atoi sThis c str 然而结果是 iStart 2147483647 有人看到我的错误吗 atoi将字符串转换为int 在您的系统上 in
  • 在 Windows 10 上的 WSL 终端中禁用蜂鸣声 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在 Windows 10 上的 WSL 中禁用视觉和音频铃声 蜂鸣声 禁用蜂鸣声bash您需要取消注释 或添加 如果尚未存在 该行se
  • Safari:flexbox 和最小高度

    我需要一个带有 Flexbox 子项的滚动 Flexbox 容器 容器有一个 由 flexbox 定义的高度 子级应该和它们的内容一样高 这在 Safari 中效果很好 在 Safari 中 子级不会超出容器的高度 实际上 Safari 中
  • 是否可以在React应用程序中忽略fetch api的ssl验证?

    我在 React 单页应用程序中使用 fetch API 并且需要访问自签名的 https 微服务 由于 SSL 验证而失败 是否可以忽略验证 以及如何做呢 不 此错误来自您的浏览器 在 JavaScript 中无法避免 您必须将自签名证书
  • 缩放内容以适合 UWP WebView

    我正在尝试在 UWP 应用程序内的 XAML WebView 控件中实现缩放到内容适合功能 作为半官方的缩放解决方案 https code msdn microsoft com windowsapps How to zoom inout t
  • Android:列表视图上的多个操作 - 焦点问题

    我想实现一个 ListView 用我的光标可以毫无问题地做到这一点 现在 根据您单击的行 它会将您带到基于该行上按下的信息的新活动 就像它应该的那样 并且符合预期 但是 我希望有一个按钮来删除该行 以便用户可以按该行的任何部分来启动新活动
  • 如何使用正则表达式匹配包含表情符号的 URL?

    如何编写正则表达式来匹配包含表情符号的 URL 正则表达式应匹配普通字母数字 URL 以及域名 路径和 或参数中包含表情符号的 URL 例如 http to http www http www to http to I 编码 ref 当今大
  • .net 中的开源文档管理系统? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有基于 NET 构建的开源文档管理系统 我们发现了大量基于 Java 的开源 DMS 但在 NET
  • 为什么这段带有几个“or”语句的代码比在 Java 中使用查找表稍快一些?

    在查看我昨天问的一个微优化问题时 here https stackoverflow com questions 295579 fastest way to determine if an integers square root is an
  • Ruby On Rails libyaml

    我在 Linux 上运行 Rails 版本 3 2 8 和 ruby 版本 1 9 3 p286 email protected cdn cgi l email protection rails apps myapp rails v Rai
  • 创建 REST 子资源来获取列表的最后一个或第一个元素是不好的做法吗?

    假设我已经构建了一个用于做笔记的 REST 服务 如下所示 GET notes gives me all notes GET notes id gives the note with the identified by id POST no
  • 为什么在任何给定的 .html 文件中换行符都会转换为“ ”?

    我有一个与 HTML 相关的问题 为了展示我的 简单的问题 我将使用一个最小的例子 考虑以下 HTML 内容 Foo Bar 当您在浏览器中调用它时 它会显示 Foo Bar 一条线 到目前为止 一切都很好 然而 当你做几乎相同的事情并存储
  • 如何更改拍摄的文档以使其看起来“扫描”

    我怎么能够do this http www techcrunch com 2009 03 17 jotnot turns your iphones camera into a document scanner 在 Python PIL 中
  • Magento:获取所有运费

    如何获得包含 magento 中运费的数组 对象 例如统一费率 免费送货等 与选择的地址或产品无关 这是另一种方法 您需要设置邮政编码和国家 地区 即使这对您的运输方式并不重要 Change to your postcode country
  • 模板依赖 false

    我有一个不能直接使用的类模板 只允许专业化 我想用static assert显示有意义的错误消息 我不能只打字static assert false error since false不依赖于值 即使从未使用过模板 编译器也可能会显示错误消