小编ste*_*ire的帖子

什么规则管理类型之间多个用户定义的转换的使用?

我有这个代码:

class MyString
{
public:
    operator const char*() const {
        return nullptr;
    }
};

class YourString
{
public:
    YourString() {}
    YourString(const char* ptr) {
        (void)ptr;
    }

    YourString& operator=(const char* ptr)
    {
        return *this;
    }
};

int main()
{
    MyString mys;

    YourString yoursWorks;
    yoursWorks = mys;

    YourString yoursAlsoWorks(mys);

    YourString yoursBreaks = mys;
}
Run Code Online (Sandbox Code Playgroud)

MSVC毫无疑问地接受它.Clang-CL不接受它:

$ "C:\Program Files\LLVM\msbuild-bin\CL.exe" ..\string_conversion.cpp
..\string_conversion.cpp(32,13):  error: no viable conversion from 'MyString' to 'YourString'
        YourString yoursBreaks = mys;
                   ^             ~~~
..\string_conversion.cpp(10,7):  note: candidate constructor (the implicit copy constructor) …
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++

11
推荐指数
1
解决办法
758
查看次数

GCC内部编译器错误:分段错误

我尝试包含一个文件,我在cmake中定义.

-DUNINSTD_INC=$ENV{TARGET_FS}/usr/include/unistd.h
Run Code Online (Sandbox Code Playgroud)

我检查了这个定义,UNINSTD_INC是正确的文件路径.

代码剪切,导致分段错误如下:

#define SURROUND(x) QUOTE(x)
#define QUOTE(x) #x

#include SURROUND(UNINSTD_INC)
Run Code Online (Sandbox Code Playgroud)

如果我编译代码,我会收到以下错误:

unistd.h:1:内部编译器错误:分段错误请提交完整的错误报告,如果合适,请提供预处理的源代码.

有人有想法解决这个问题吗?

或者包含预定义文件的其他方式?

gcc版本:gcc版本4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu5)

c++ gcc segmentation-fault c-preprocessor

5
推荐指数
1
解决办法
4299
查看次数