我有这个代码:
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) 我尝试包含一个文件,我在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)