Я не совсем уверен в этом. Скажем, у меня есть три файла:
foo.h
#include <iostream>
inline void foo();
void foo()
{
std::cout << "Foo" << std::endl;
}
foo.cpp:
#include "foo.h"
void baz();
int main()
{
baz();
foo();
}
bar.cpp
#include "foo.h"
void baz()
{
foo();
}
Теперь определение foo будет скомпилировано в оба блока компиляции foo.o и bar.o. Если я правильно ее понимаю, встроенные функции будут избегать объединения ссылок. g++ скомпилирован и связывает это просто отлично, но с clang++ 2.8 я получаю эту ошибку:
/tmp/cc-7RdmYP.o: In function `foo()':
bar.cpp:(.text+0x50): multiple definition of `foo()'
/tmp/cc-LW3id3.o:foo.cpp:(.text+0x50): first defined here
collect2: ld returned 1 exit status
Кажется, что clang++ не видит void foo()
как встроенную функцию. Однако он отлично работает, когда я добавляю встроенное определение.
Нужно ли мне добавлять inline в void foo()
, чтобы увидеть его как встроенную функцию, или это ошибка clang++?