我一直在尝试实现类似于C++ 11标准中定义的static_assert的方法。主要问题是C++编译器如何将传递到static_assert的文本消息作为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不支持attribute(error))

#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; \
})

关于c++ - 是否有满足C99标准的static_assert替代品?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20425938/

10-12 00:48