我一直在尝试实现类似的方法static_assert
这是在 C++11 标准中定义的。主要问题是C++编译器如何编写传递给的文本消息static_assert
as a const char*
?我可以让编译器写一条消息,比如A_is_not_POD
。这就是我所拥有的:
#define MY_STATIC_ASSERT(condition, name) \
typedef char name[(condition) ? 1 : -1];
但如果让编译器写出类似的东西那就太好了"Error: A is not POD."
有什么建议么?
不确定我理解问题,但 C11 有_Static_assert(condition, errmessage)
。在 C99 中缺少此功能,但根据编译器的不同,可以进行模拟。例如。对于 gcc(不幸的是 clang 不支持属性(错误))
#define MY_STATIC_ASSERT(cnd, descr) ({ \
extern int __attribute__ ((error("static assert failed: (" #cnd ") (" #descr ")"))) \
compile_time_check(void); \
((cnd) ? 0 : compile_time_check()), 0; \
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)