我试图编译这个(--std=c++0x)使用:
- [FAIL with --std=c++0x flag] clang 版本 3.2-1~exp9ubuntu1 (tags/RELEASE_32/final) (基于 LLVM 3.2)
- [FAIL without --std=c++0x flag] clang 版本 3.2-1~exp9ubuntu1 (tags/RELEASE_32/final) (基于 LLVM 3.2)
- [FAIL without --std=c++11 flag] Apple LLVM 版本 5.0 (clang-500.2.79) (基于 LLVM 3.3svn)
- [FAIL with --std=c++11 flag] Apple LLVM 版本 5.0 (clang-500.2.79)(基于 LLVM 3.3svn)
- [通过 --std=c++0x 标志] gcc 版本 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1)
- [没有 --std=c++0x 标志的失败] gcc 版本 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1)
当它在clang ubuntu失败时,会产生以下错误:
test.cpp:26:37: error: no viable conversion from 'const P' to 'timeval'
return static_cast<timeval>(_p);
^~
/usr/include/x86_64-linux-gnu/bits/time.h:30:8: note: candidate constructor
(the implicit copy constructor) not viable: no known conversion from 'const P' to
'const timeval &' for 1st argument
struct timeval
^
/usr/include/x86_64-linux-gnu/bits/time.h:30:8: note: candidate constructor
(the implicit move constructor) not viable: no known conversion from 'const P' to 'timeval &&' for
1st argument
struct timeval
^
test.cpp:9:5: note: candidate function
operator const timeval() const {
^
test.cpp:13:5: note: candidate function
operator const int8_t() const {
^
我不确定我做错了什么。
#include <iostream>
#include <cstdint>
union P {
timeval _timeval;
int8_t _int8_t;
uint8_t _uint8_t;
operator const timeval() const {
return _timeval;
}
operator const int8_t() const {
return _int8_t;
}
};
struct Y {
operator const int8_t() const {
return static_cast<int8_t>(_p);
}
operator const timeval() const {
return static_cast<timeval>(_p);
}
P _p;
};
int main()
{
Y testobj;
timeval ret = static_cast<timeval>(testobj);
return 0;
}