template<bool> struct a_t;
template<> struct a_t<true> {
template<int> struct b {};
};
template<> struct a_t<false> {
enum { b };
};
typedef a_t<sizeof(void*)==sizeof(int)> a;
enum { c, d };
int main() {
a::b<c>d; // declaration or expression?
}
这是完全有效的,标准兼容的C++,但是注释行的确切含义取决于您的实现。如果sizeof(void*)==sizeof(int)(在32位平台上是典型的),则它是a::b<c>类型的局部变量d的声明。如果条件不成立,那么它就是一个无操作表达((a::b < c) > d)。为a::b添加构造函数实际上会让您通过存在/不存在副作用来暴露差异。
多年来,我一直在使用pygccxml,这是一个围绕GCC-XML的非常好的Python包装器。这是一个功能非常丰富的包,它构成了一些使用良好的代码生成工具的基础,比如py++,它来自同一个作者。
这就是为什么有像GCC_XML这样的项目可以与python xml库结合在一起。
一些在解析C++方面表现不错的非编译器项目是:
不是这样的答案,而是为了演示如何正确地解析C++的真实性。我最喜欢的演示:
这是完全有效的,标准兼容的C++,但是注释行的确切含义取决于您的实现。如果
sizeof(void*)==sizeof(int)
(在32位平台上是典型的),则它是a::b<c>
类型的局部变量d
的声明。如果条件不成立,那么它就是一个无操作表达((a::b < c) > d)
。为a::b
添加构造函数实际上会让您通过存在/不存在副作用来暴露差异。相关问题 更多 >
编程相关推荐