我试图在版本4.9.0之前使用GCC分发的版本中测试libstdc++因为std::regex已实现但很大程度上已破坏的版本libstdc++.
注意:
我需要测试版本libstdc++,而不是GCC,因为Clang也支持使用libstdc++标准库.这排除了测试__GNUC_PATCHLEVEL__,__GNUC__和__GNUC_MINOR__宏.
该__GLIBCXX__宏是一个日期,而不是一个版本号并不会单调递增.例如,GCC 4.8.4附带#define __GLIBCXX__ 20150426,比GCC 4.9.0的发布日期更新.
有没有可靠的方法来测试它的版本libstdc++不依赖于使用GCC我的编译器?
我试图确定以下代码是否调用未定义的行为:
#include <iostream>
class A;
void f(A& f)
{
char* x = reinterpret_cast<char*>(&f);
for (int i = 0; i < 5; ++i)
std::cout << x[i];
}
int main(int argc, char** argue)
{
A* a = reinterpret_cast<A*>(new char[5])
f(*a);
}
Run Code Online (Sandbox Code Playgroud)
我的理解是,reinterpret_casts to和from char*是兼容的,因为标准允许别名char和unsigned char指针(强调我的):
如果程序试图通过不同于以下类型之一的左值访问对象的存储值,则行为未定义:
- 对象的动态类型,
- 一个cv限定版本的动态类型的对象,
- 与对象的动态类型对应的有符号或无符号类型的类型,
- 一种类型,是有符号或无符号类型,对应于对象动态类型的cv限定版本,
- 一种聚合或联合类型,包括其成员中的上述类型之一(包括递归地,子聚合或包含联合的成员),
- 一个类型,它是对象动态类型的(可能是cv限定的)基类类型,
- a
char或unsigned char类型.
但是,我不确定是否f(*a)通过创建A&对无效指针的引用来调用未定义的行为.决定因素似乎是"尝试访问"措辞意味着在C++标准的背景下.
我的直觉是,这并不能构成一个访问,由于访问都需要A进行定义(现声明,但在这个例子中没有定义).不幸的是,我在C++标准中找不到"访问"的具体定义:
是否f(*a)调用未定义的行为?什么构成C++标准中的"访问"? …
c++ standards strict-aliasing language-lawyer reinterpret-cast
我正在尝试使用模板模板参数libtooling来打印CXXRecordDecl模板类的实例化。不幸的是,模板模板参数的字符串表示不是完全限定的(例如,它缺少命名空间)。
我正在CXXRecordDecl使用以下代码打印:
clang::PrintingPolicy policy = compiler_instance->getLangOpts();
std::string name = decl->getTypeForDecl()->getCanonicalTypeInternal().getAsString(policy);
Run Code Online (Sandbox Code Playgroud)
这是一个示例,我希望输出为ns::A<ns::B>,但我得到ns::A<B>:
clang::PrintingPolicy policy = compiler_instance->getLangOpts();
std::string name = decl->getTypeForDecl()->getCanonicalTypeInternal().getAsString(policy);
Run Code Online (Sandbox Code Playgroud)
如何使用模板模板参数打印类的完全限定名称?
在相关说明中,有没有办法在不调用 的情况下做到这一点getCanonicalTypeInternal,这听起来像是一个内部函数?
[编辑 #1]我也试过decl->getQualifiedNameAsString(),它完全省略了模板参数和输出ns::A。
[编辑#2] Cling 用一组问题交换另一组问题。它确实为模板模板参数正确生成了完全限定的类型。但是,它会为函数(和函数指针)的参数和返回类型生成非限定名称。例如,下面的代码产生输出ns::A<void (B)>而不是ns::A<void (ns::B)>:
namespace ns {
template <template <class> class T>
class A {
T<int> x;
};
template <class T>
class B {
T y;
};
} // namespace ns
int main(int argc, …Run Code Online (Sandbox Code Playgroud) 在阅读了StackOverflow上的其他 问题后,我得到了一段Python代码,可以通过Tor代理发出请求:
import urllib2
proxy = urllib2.ProxyHandler({'http':'127.0.0.1:8118'})
opener = urllib2.build_opener(proxy)
print opener.open('https://check.torproject.org/').read()
Run Code Online (Sandbox Code Playgroud)
由于Tor使用TorButton在Firefox中运行良好,我希望它能在Python中正常工作.不幸的是,包含在乱七八糟的HTML中:Sorry. You are not using Tor.我不确定为什么会这样,或者如何让Tor正常工作urllib2.
我已经实现并测试了数据结构,现在想让它与STL算法集合兼容.实现自定义迭代器等的指南.特别:
++,+=,==,!=?)理想情况下,这些答案将成为实现STL兼容数据结构的更大参考的一部分,但我不确定这样的文档是否存在.