Using C++11 in clang-tools-extra Round 2

Nico wrote:
Sure, you can build clang itself, but building programs that use c++11 don't Just Work as far as I can tell:

thakis@yearofthelinuxdesktop:/usr/local/google/chrome/src$ cat test.cc #include <iostream>

int main() {}
thakis@yearofthelinuxdesktop:/usr/local/google/chrome/src$
third_party/llvm-build/Release+Asserts/bin/clang++ test.cc thakis@yearofthelinuxdesktop:/usr/local/google/chrome/src$
third_party/llvm-build/Release+Asserts/bin/clang++ test.cc -std=c++11 In file included from test.cc:1:
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.4/../../../../include/c++/4.4/iostream:39:
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.4/../../../../include/c++/4.4/ostream:39:
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.4/../../../../include/c++/4.4/ios:39:
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.4/../../../../include/c++/4.4/exception:148:
/usr/lib/gcc/x86_64-linux-gnu/4.4/../../../../include/c++/4.4/exception_ptr.h:143:13:
error: unknown type name
      'type_info'
      const type_info*
            ^
1 error generated.

[Edwin] I tried this test exactly and it worked just fine for me. I'm using clang++ 3.2. I'm on Ubuntu 12.04 with gcc 4.6.3 installed.

Nico wrote:
Sure, you can build clang itself, but building programs that use c++11 don't Just Work as far as I can tell:

thakis@yearofthelinuxdesktop:/usr/local/google/chrome/src$ cat test.cc #include <iostream>

int main() {}
thakis@yearofthelinuxdesktop:/usr/local/google/chrome/src$
third_party/llvm-build/Release+Asserts/bin/clang++ test.cc thakis@yearofthelinuxdesktop:/usr/local/google/chrome/src$
third_party/llvm-build/Release+Asserts/bin/clang++ test.cc -std=c++11 In file included from test.cc:1:
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.4/../../../../include/c++/4.4/iostream:39:
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.4/../../../../include/c++/4.4/ostream:39:
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.4/../../../../include/c++/4.4/ios:39:
In file included from
/usr/lib/gcc/x86_64-linux-gnu/4.4/../../../../include/c++/4.4/exception:148:
/usr/lib/gcc/x86_64-linux-gnu/4.4/../../../../include/c++/4.4/exception_ptr.h:143:13:
error: unknown type name
      'type_info'
      const type_info*
            ^
1 error generated.

[Edwin] I tried this test exactly and it worked just fine for me. I'm using clang++ 3.2. I'm on Ubuntu 12.04 with gcc 4.6.3 installed.

Ah, http://clang.llvm.org/cxx_status.html says that 4.6 and 4.7 should
be fine. I'm using 4.4, but Precise ships with 4.6, so this is
possibly not an issue.

I don't know if libstdc++ is abi-compatible with itself in c++11 mode
and in c++98 mode. I thought someone said it might not be, but I'm not
sure.

Keep in mind that building clang/llvm with c++11 support would only be a requirement for those working with the tools-extra repository

I'm worried less about devs and more about users wanting to use
binaries / packages from tools-extra.

Nico wrote:
I don't know if libstdc++ is abi-compatible with itself in c++11 mode and in c++98 mode. I thought someone said it might not be, but I'm not sure.

[Edwin] Is this something to be concerned about if all of llvm/clang/tools-extra is built with c++11 enabled by a compiler that is itself c++11 enabled?

Keep in mind that building clang/llvm with c++11 support would only be
a requirement for those working with the tools-extra repository

I'm worried less about devs and more about users wanting to use binaries / packages from tools-extra.

[Edwin] Is it possible to get binaries from tools-extra without building from source? Are they distributed? If not, then any user will also be a developer. At least in the case of cpp11-migrate anybody wanting to use that tool will already be familiar with c++11 problems right?