当两者都是模板时,G++ 不允许在基类中使用受保护的默认构造函数?

2024-01-06

我创建了一个可选惰性参数的标头 https://codereview.stackexchange.com/q/133991/110660(也可见于GitHub 存储库 https://github.com/BatmanAoD/PublicPaste/tree/master/GenericCppCode/OptionalLaziness).

在我的原始代码版本中,我为我的基类模板提供了一个受保护的默认构造函数:

template <typename VAL_TYPE>
class LazyType_Base
{
    // ....
    LazyType_Base(void) =default;
// ....

然后,在派生类之一中:

template <typename VAL_TYPE>
class LazyType_Eager : public LazyType_Base<VAL_TYPE>
{
  public:
    LazyType_Eager(
        VAL_TYPE&& final_val)
      : LazyType_Base<VAL_TYPE>{}
      , val_{final_val}
    {}
// .....

这在 Clang++ 中编译得很好,但在 G++ 5.1 中,我收到此错误:

In file included from Test_OptionallyLazy.cpp:3:0:
OptionallyLazy.hpp: In instantiation of ‘LazyType_Eager<VAL_TYPE>::LazyType_Eager(VAL_TYPE&&) [with VAL_TYPE = int]’:
Test_OptionallyLazy.cpp:22:14:   required from here
OptionallyLazy.hpp:23:5: error: ‘LazyType_Base<VAL_TYPE>::LazyType_Base() [with VAL_TYPE = int]’ is protected
     LazyType_Base(void) =default;
     ^
OptionallyLazy.hpp:58:23: error: within this context
       , val_{final_val}

这里发生了什么?最奇怪的是另一个派生类做了类似的事情doesn't触发错误。

更换=default具有显式默认实现的构造函数{}解决编译器错误。

EDIT:感谢 T.C.,here http://melpon.org/wandbox/permlink/J8sHbWHYFQ26hHZq是一个真正的 MCVE:

class Meow
{
  protected:
    Meow(void) =default;    
  public:    
    virtual void f() {}
};

class Purr : public Meow
{
  public:
    Purr()
      : Meow{}
    {}

};

None

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

当两者都是模板时,G++ 不允许在基类中使用受保护的默认构造函数? 的相关文章

  • VLC 媒体播放器有 C# 界面吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否可以使用 C 控制台应用程序中的包装器从 VLC 播放中当前播放的文件中读取曲目统计信息 时间 标
  • 静态构造函数和 BeforeFieldInit?

    如果类型没有静态构造函数 则将执行字段初始值设定项 就在使用该类型之前 或者在某个时间点突发奇想 运行时 为什么这段代码 void Main start Dump Test EchoAndReturn Hello end Dump clas
  • 捕获 .aspx 和 .ascx 页面中的异常

    问题说明了一切 请看以下示例代码 ul li li ul
  • EntityHydrate 任务失败

    我最近安装了 Visual Studio 11 Beta 和 Visual Studio 2010 之后 我无法在 Visual Studio 2010 中构建依赖于 PostSharp 的项目 因此我卸载了 Visual Studio 1
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • 我们可以通过指针来改变const定义的对象的值吗?

    include
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • 调用 .ToArray() 时出现 ArgumentException

    我有一个经常被清除的列表 代码完全是这样的 VisitorAgent toPersist List
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • C:设置变量范围内所有位的最有效方法

    让我们来int举个例子 int SetBitWithinRange const unsigned from const unsigned to To be implemented SetBitWithinRange应该返回一个int其中所有
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • 如果找不到指定的图像文件,显示默认图像的最佳方式?

    我有一个普通的电子商务应用程序 我将 ITEM IMAGE NAME 存储在数据库中 有时经理会拼错图像名称 为了避免 丢失图像 IE 中的红色 X 每次显示产品列表时 我都会检查服务器中是否有与该产品相关的图像 如果该文件不存在 我会将其
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内

随机推荐

  • 有充分的理由不使用 ORM 吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 查找并迭代android中的所有短信/彩信

    首先 也是最重要的 我发现了这个answer https stackoverflow com a 6446831 2415237特别有帮助 然而 这让我想知道如何找到这些信息 我似乎不知道如何迭代收件箱中的所有消息 我当前的解决方案使用Ur
  • Clearerr 是用来做什么的?

    我试图了解 stdio 功能何时clearerr 应该使用 例如 如果我fread or fwrite 在有效的FILE 并得到一个简短的计数ferror是真的 我能做什么 从我到目前为止所读到的来看 fread and fwrite 很健
  • 打字稿:找不到名称“代理”

    我需要声明一个 Proxy 类型的新变量 来自 ES6 规范 myProxy Proxy 但我收到下一个错误 找不到名称 代理 我该如何修复它 假设您将目标设置为es2015或包括库es2015使用lib选项 您可以创建一个Proxy 诀窍
  • 更新包并防止其恢复为原始状态

    我想升级包 ggplot2 library ggplot2 packageDescription ggplot2 Version gt 0 8 3 但当前版本是0 8 7 我尝试了 update packages 它似乎工作正常 但它仍然返
  • 如何获取临时文件名?

    我看过一些与我的问题相关的帖子 但没有一个能完全解决这个问题 我需要在标准临时目录中创建一个文件 完成写入后 将其移动到其他位置 这个想法是 该文件在下载时被视为临时文件 在下载完成后被视为永久文件 我正在尝试通过致电mkstemp htt
  • 将数据从一个纬度经度网格插入到另一个纬度经度网格上?

    我有两个位于经纬度网格上的数据数组 第一个 A 的形状为 89 180 第二个 B 的形状为 94 192 A 的纬度按降序排列 从 88 到 88 经度按升序从 0 到 358 B 的纬度按降序从 88 54199982 到 88 541
  • CNCopyCurrentNetworkInfo 不适用于 iOS 14

    我有一个使用 WIFI 连接到外部设备的应用程序 我曾经通过检查 WIFI SSID 来验证 iPhone 是否已连接到该设备 当 iOS 13 发布时 这个问题被阻止了 我通过请求位置权限来获取 SSID 来修复它 我现在尝试使用启用了位
  • 为什么sed命令包含at符号

    我不明白为什么以下 sed 命令包含 符号 sed s session s required s pam loginuid so session optional pam loginuid so g i etc pam d sshd 我查看
  • ReactJS 给出 inst.render 不是函数错误

    当我用 React 和 ReactDOM 展示一个非常基本的 Hello World 时 我遇到了一个奇怪的错误Uncaught TypeError inst render is not a function 在此查看JSBin https
  • 正则表达式“(?

    我花了大约三个小时试图理解如何
  • Websocket 可扩展性、广播问题

    如果您有一个包含许多用户 和服务器 的复杂要求 您的 websocket 基础设施 服务器 将如何扩展 尤其是广播 当然 广播不是任何 websocket 规范的一部分 但它甚至存在于基本的聊天示例中 又名 websocket 的 hell
  • Java 泛型有没有办法获取需要实现 2 个接口的泛型参数?

    假设我有这个代码 public interface ParentInterface1 public List
  • 使用 javascript 平滑自动滚动

    我正在尝试在网页上实现一些代码 以在加载页面后自动滚动 我使用Javascript函数来执行自动滚动 并在页面加载时调用我的函数 但页面仍然滚动不顺畅 有什么办法可以自动平滑地滚动我的页面吗 这是我的 JavaScript 函数 funct
  • 循环多维数组时出现问题

    我在尝试使用 PHP 循环多维数组时遇到问题 当我使用print r 函数 这是我的输出 Array 0 gt Array fname gt sname gt address gt address2 gt city gt state gt
  • Android:将位图保存为 bmp 文件格式

    我内存中有一个位图 我需要将其保存在 bmp 文件中 使用bmp 文件格式 http en wikipedia org wiki BMP file format 有什么办法可以在Android上做到这一点吗 我读了很多建议使用 png 格式
  • J 中的笛卡尔积

    我正在尝试重现 J 中生命游戏功能的 APL 代码 搜索 APL 中的生命游戏 后可以找到解释此代码的 YouTube 视频 目前我有一个矩阵R这是 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0
  • ReactJS - 调用“setState”时是否会调用渲染?

    React每次都会重新渲染所有组件和子组件setState 叫做 如果是这样 为什么 我认为这个想法是 当状态发生变化时 React 仅渲染所需的部分 在下面的简单示例中 尽管状态在后续单击时不会更改 但单击文本时 两个类都会再次呈现 因为
  • Swift + CoreData:无法在生成的 NSManagedObject 子类上自动设置可选属性

    我有一个名为 Record 的 coredata 实体 并且有一个属性 dateUpdated 我注意到生成的 NSManagedObject 子类没有可选标记 核心数据编辑器 生成的子类 预期的 UPDATED It s tedious就
  • 当两者都是模板时,G++ 不允许在基类中使用受保护的默认构造函数?

    我创建了一个可选惰性参数的标头 https codereview stackexchange com q 133991 110660 也可见于GitHub 存储库 https github com BatmanAoD PublicPaste