Определение явного преобразования - возможная ошибка GCC - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь определить простое явное преобразование в 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?Или мой код поврежден?

...