#define STL_REQUIRES( type_var, concept) \ do { \ void (* x)( type_var ) = concept##_concept_specification< type_var >\ :: concept##_requirement_violation; __x = __x; } while (0)
[quote=引用 7 楼 vipcxj 的回复:] 因为前一句只是对__x的声明和初始化,并不会引起模版实例化,因为编译器认为__x可能根本就不会被用到。第二句看似和第一句都是赋值,但第二句才是真正的赋值,并且用到了__x,这样编译器就认为必须要实例化静态函数模版了。当然第二句本身并没有实际意义,也不需要有实际意义,我们的目的只是要编译器不会忽略掉那个静态函数模版,并能对其进行编译器检查。
因为前一句只是对__x的声明和初始化,并不会引起模版实例化,因为编译器认为__x可能根本就不会被用到。第二句看似和第一句都是赋值,但第二句才是真正的赋值,并且用到了__x,这样编译器就认为必须要实例化静态函数模版了。当然第二句本身并没有实际意义,也不需要有实际意义,我们的目的只是要编译器不会忽略掉那个静态函数模版,并能对其进行编译器检查。
大神们,给点面子,回个吧
65,208
社区成员
250,517
社区内容
加载中
试试用AI创作助手写篇文章吧