Я ожидал, что реализации будут разными для каждого компилятора. Разделяют ли clang и gcc части своих реализаций на C++?
Это не то, что они используют одни и те же реализации на C++, скорее всего, оба компилятора по умолчанию ссылаются на одну и ту же стандартную библиотеку C++ в вашей системе.
Предполагаю, что вы находитесь на Linux, почти все программы, установленные из диспетчера пакетов, связаны с libstdC++ (предоставляется g ++).
По умолчанию, даже при компиляции с помощью clang ++ используется libstdC++, поэтому при включении iostream, например, он использует один из /usr/include/c++/4.8.
Если вы хотите связаться с LLVM с библиотекой ++, вам нужно установить «LibC++ - Дев» пакет (название может меняться в зависимости от вашего дистрибутива) и компилировать с помощью: -stdlib = LibC++ (вместо default: -stdlib = libstdC++).
пример:
test.cpp:
#include <iostream>
int main(int argc, char *argv[])
{
std::cout << "Hello World!!!\n";
return 0;
}
компиляции с помощью:
$ clang++ -stdlib=libc++ -o test test.cpp
будет использовать заголовок из/USR/включать/C++/v1 (от LLVM)
но скомпилирование с использованием:
$ clang++ -stdlib=libstdc++ -o test test.cpp
# or (assuming the default on your system is libstdc++)
$ clang++ -o test test.cpp
будет использовать заголовок из /usr/include/c++/4.8 (от г ++)
Зависит от того, как вы их используете. Они используют заголовки и библиотеку, которую им говорят использовать. –