Я пытаюсь определить простое явное преобразование в C ++ 11 отдельно от файла заголовка, используя GCC 4.8.5 (по умолчанию в CentOS 7):
foo.h:
#ifndef foo_h_
#define foo_h_
typedef struct {
int x;
explicit operator int() const;
} A;
#endif
foo.cpp:
#include "foo.h"
A::operator int() const
{
return this->x;
}
main.cpp:
#include "foo.h"
int main(int,char**)
{
A a{1};
int b = (int)a - 1;
return 0;
}
GCC 4.8.5 по непонятным причинам не может связать этот код:
$ g++ -std=c++11 foo.cpp main.cpp
/tmp/cc5osctA.o: In function `main':
main.cpp:(.text+0x1e): undefined reference to `A::operator int() const'
collect2: error: ld returned 1 exit status
Однако, если я использую любую версию GCC> = 5 (например, GCC 5.3.1 из коллекции программного обеспечения devtoolset-4 RHEL), она работает, как и следовало ожидать:
$ scl enable devtoolset-4 "g++ -std=c++11 foo.cpp main.cpp"
### (no linker errors, b == 0 when running)
Это ошибка в поддержке C ++ 11 в GCC 4.8.5?Или мой код поврежден?