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

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对此的回答

相关文章:

  • Armv7l或树莓派32位RPI 4B编译faiss
  • 【多线程初阶】线程状态 线程安全
  • AI书签管理工具开发全记录(六):前端管理基础框框搭建 Vue3+Element Plus
  • 跳动的爱心
  • PowerDesigner通过SQL反向生成类图
  • 【面试】喜茶Java面试题目
  • Axure疑难杂症:中继器图片替换功能优化(支持修改已有记录-玩转中继器)
  • C++ 游戏开发详细流程
  • 当 Python 遇上 Go:Sponge 如何成为替代 Django/Flask 的理想选择
  • JVM——回顾:JVM的起源、特性与系统构成
  • 无人机多旋翼倾转动力测试系统-适用于(eVTOL开发、缩比模型测试、科研教育)
  • 处理知识库文件_编写powershell脚本文件_批量转换其他格式文件到pdf文件---人工智能工作笔记0249
  • PHP 垃圾回收高级特性
  • dockers搭建mysql环境
  • 解决Docker存储空间不足问题
  • Redis 数据恢复的月光宝盒,闪回到任意指定时间
  • powershell 中 invoke-expression 报错解决
  • 机器视觉运动控制一体机在背靠背点胶焊锡机上的应用
  • ESP32-C3 Vscode+ESP-IDF开发环境搭建 保姆级教程
  • Apache SeaTunnel部署技术详解:模式选择、技巧与最佳实践
  • 建网站素材/商品关键词怎么优化
  • 黄州做网站的/seovip培训
  • 微小店网站建设比较好/网络营销的现状和发展趋势
  • 旌阳移动网站建设/如何在网上做销售推广
  • 如何在阿里巴巴上做网站/济南seo公司
  • 网站推广建设加盟/网络营销与管理