免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
搜索
本版
文章
帖子
ToB圈子
用户
登录
立即注册
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微头条
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
数据库
›
Oracle
›
MSVC支持但是Clang会报错的C++举动
返回列表
发新帖
MSVC支持但是Clang会报错的C++举动
[复制链接]
发表于 2025-7-9 03:46:13
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
目标
由于在使用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对此的回答
但是在msvc编译器中,如果原始模板在全局定名空间中定义,msvc允许特例化在其他的定名空间,而结果等同于在全局定名空间中定义。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复
使用道具
举报
返回列表
浏览过的版块
SQL-Server
尚未崩坏
+ 我要发帖
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表