当前位置: 首页 > article >正文

MSVC支持但是Clang会报错的C++行为

MSVC的非标

  • 目的
  • 友元别名
  • 模板类显式特例化的命名空间限制

目的

因为在使用clang进行ast分析msvc项目的时候,出现了爆红现象,了解到msvc会有一些不严格按照c++标准但是允许的语法,在这点上clang就很严格,所以本文以clang为基准,记录到目前为止发现的msvc的非标语法。

友元别名

class A{};
class B
{using AOtherName = A;friend class AOtherName; // msvc允许,clang报错【别名不能和class/struct一起用】friend AOtherName; // 正确做法
};

因为在 C++ 中,类型别名(通过 typedef 或 using 定义)不能与 class 或 struct 等修饰符一起使用。stack对此的回答

模板类显式特例化的命名空间限制

template<typename T>
struct AStruct
{static bool isZero(const T& val);
};namespace A
{
// msvc不报错,clang报错【模板特例化必须跟原始模板在同一命名空间】
template<>
struct AStruct<int>
{static bool isZeros(const int& val){return val == 0;}
};
}
// 正确做法,同样定义在全局命名空间
template<>
struct AStruct<int>
{static bool isZeros(const int& val){return val == 0;}
};

在C++中模板类的显式特化必须在其原始模板定义所在的命名空间中进行!stack对此的回答

http://www.lryc.cn/news/2393900.html

相关文章:

  • 截屏精灵:轻松截屏,高效编辑
  • 【JavaWeb】基本概念、web服务器、Tomcat、HTTP协议
  • 黑马程序员C++核心编程笔记--4 类和对象--封装
  • Debian:自由操作系统的精神图腾与技术基石
  • 云计算Linux Rocky day02(安装Linux系统、设备表示方式、Linux基本操作)
  • 在 ODROID-H3+ 上安装 Win11 系统
  • Docker常用命令操作指南(一)
  • 什么是 SQL 注入?如何防范?
  • 使用el-input数字校验,输入汉字之后校验取消不掉
  • Docker容器启动失败的常见原因分析
  • Java提取markdown中的表格
  • 立志成为一名优秀测试开发工程师(第七天)——unittest框架的学习
  • 精益数据分析(85/126):营收阶段的核心指标与盈利模型优化——从数据到商业决策的落地
  • 论坛系统(4)
  • 本地Markdown开源知识库选型指南
  • 【.net core】SkiaSharp 如何在Linux上实现
  • 后端项目中静态文案国际化语言包构建选型
  • 前端面经 React常见的生命周期
  • 力扣面试150题--二叉树的层平均值
  • 【Doris入门】Doris初识:分布式分析型数据库的核心价值与架构解析
  • C#面试问题41-60
  • 数据结构与算法学习笔记(Acwing 提高课)----动态规划·区间DP
  • 【合集】Linux——31个普通信号
  • 从0到1搭建AI绘画模型:Stable Diffusion微调全流程避坑指南
  • ASP.NET Core 中JWT的基本使用
  • 未来技术展望
  • 从一到无穷大 #46:探讨时序数据库Deduplicate与Compaction的设计权衡
  • vue3 导出excel
  • 带你手写React中的useReducer函数。(底层实现)
  • day024-网络基础-TCP与UDP、DNS