纵观LLVM文件,他们提到,他们使用"RTTI的自定义窗体",这是他们的原因isa<>,cast<>和dyn_cast<>模板功能.
通常,阅读一个库重新实现一种语言的一些基本功能是一种可怕的代码味道,只是邀请运行.但是,这是我们所说的LLVM:这些人正在研究C++编译器和 C++运行时.如果他们不知道他们在做什么,我会非常沮丧,因为我更喜欢Mac OS附带clang的gcc版本.
尽管如此,由于缺乏经验,我还是想知道正常RTTI的缺陷是什么.我知道它只适用于有v-table的类型,但只提出两个问题:
virtual?虚拟析构函数似乎很擅长这一点.我安装了gcc 4.6.来自macports(支持C++ 0x).但是,当我检查'gcc --version`时,它显示的是旧版本.如何使用macports安装的新gcc?
我在mac机器上使用OS 10.9.我想知道我正在使用的gcc版本.所以我尝试gcc --version了终端,结果如下:
$ gcc --version
Configured with: --prefix=/Applications/Xcode5-DP.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode5-DP.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.1.58) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix
Run Code Online (Sandbox Code Playgroud)
在输出中,没有与gcc相关的细节,但clang就在那里.我很困惑gcc命令是否执行clang或gcc(gnu).
我试图让一些旧的第三方软件在OS X 10.9上编译.我已经设法通过调整Makefile中的设置来摆脱大多数编译问题,这些设置最初是在2005年左右为gcc编写的.但是,我目前还不知道如何克服C++源文件的这个错误:
/utility.h:42:10:致命错误:'ext/slist'文件未找到
据我所知,这ext/slist属于某些版本的STL.该版本是否已被取代,或者是否必须以任何特殊方式激活Apple版本的Clang/LLVM(5.0 for OS X 10.9)?
如果可能的话,我更愿意使用预安装的工具编译此软件,而不是通过MacPorts安装gcc等步骤.
顺便说一句,这些警告也持续存在:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/ext/hash_set:202:2:警告:不推荐使用标头.迁移到[-W#警告] /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/ext/hash_map:209:2:警告:使用标头已弃用.迁移到[-W#警告]
我正在尝试构建一个程序,其源代码是我从互联网上下载的.当我尝试编译它时,我收到错误消息
friend declaration specifying a default argument must be the only declaration
Run Code Online (Sandbox Code Playgroud)
这是违规代码:
typedef int Var;
struct Lit {
int x;
// Use this as a constructor:
friend Lit mkLit(Var var, bool sign = false);
bool operator == (Lit p) const { return x == p.x; }
bool operator != (Lit p) const { return x != p.x; }
bool operator < (Lit p) const { return x < p.x; }
inline Lit mkLit(Var var, bool sign) { …Run Code Online (Sandbox Code Playgroud)