我们使用模板特针对某些类型的参数一样unsigned long long与uint64_t的冲突?
class my_template_class<uint64_t M>: public my_template_class_base<uint64_t> {
....
}
class my_template_class<unsigned long long,M>: public my_template_class_base<unsigned long long> {
....
}
这是用64位编译使用gcc完美的工作。而当我们尝试32位模式时,它会报告上面两类的“以前的定义”。
因此unsigned long long
与32位编译中的uint64_t
相同,但不支持64位编译?
编译区别是CXX
标志-m32
和-m64
@FrédéricHamidi:不太可能;我从来没有见过一个128位“unsigned long long”的系统。 –
uint64_t实际编译成什么?我没有GCC方便,但你可以检查stdint标题。可能会给出一些关于编译器实际所见的线索。 – BlamKiwi
我很确定,在64位平台上,'uint64_t'被定义为'unsigned long',因此不会与'unsigned long long'冲突,而在32位平台上,'uint64_t'必须是'unsigned长长',产生你的错误 – NiBZ