未使用的asm()在不支持的体系结构上的行为

Cur*_*ous 3 c++ x86 assembly arm

asm()在未使用但不受支持的架构中,代码块的行为是什么?例如,如果我在ARM上编译以下代码会发生什么

if (false) {
    asm volatile("x86specificinstruction" ...);
}
Run Code Online (Sandbox Code Playgroud)

这是有效的C++吗?代码会编译吗?标准是否对此类情况有所说明?

Nat*_*ica 5

这取决于如何处理它.来自[dcl.asm]

一个asm声明的形式

asm-definition:
    attribute-specifier-seq opt asm ( string-literal ) ;
Run Code Online (Sandbox Code Playgroud)

asm声明得到有条件的支持; 它的含义是实现定义的.asm-definition中的可选attribute-specifier-seq属于asm声明.[注意:通常用于将信息通过实现传递给汇编程序. - 结束说明]

强调我的

那说你可以把代码放在一个#if #endif,使用SFINAE,或使用if constexpr.如果条件不满足,所有这些都将删除编译代码.