定义显式转换-可能的GCC错误

时间:2019-02-06 22:51:25

标签: c++ c++11 gcc

我正在尝试使用GCC 4.8.5(CentOS 7的默认值)在C ++ 11中与头文件分开定义一个简单的显式转换:

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的任何版本(例如RHEL的devtoolset-4软件集合中的GCC 5.3.1),它就会正常工作,正如我期望的那样:

$ scl enable devtoolset-4 "g++ -std=c++11 foo.cpp main.cpp"
### (no linker errors, b == 0 when running)

这是GCC 4.8.5的C ++ 11支持中的错误吗?还是我的代码格式错误?

0 个答案:

没有答案