Używamy szablonu specjalizacji jakiegoś parametru typu jakunsigned długi długi konflikt z 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> {
....
}
Jest to doskonale współpracuje z 64-bitowych kompilacji z gcc. Kiedy próbujemy trybu 32-bitowego, zgłasza "poprzednią definicję" dla powyższych dwóch klas.
Więc unsigned long long
jest taki sam jak uint64_t
w 32-bitowej kompilacji, ale nie w wersji 64-bitowej?
Różnica kompilacja jest CXX
flag -m32
i -m64
@ FrédéricHamidi: Mało prawdopodobne; Nigdy nie widziałem systemu z 128-bitowym 'unsigned long long'. –
Do czego faktycznie się kompiluje uint64_t? Nie mam GCC pod ręką, ale możesz sprawdzić nagłówek stdint. Prawdopodobnie dałoby kilka wskazówek, co faktycznie widzi kompilator. – BlamKiwi
Jestem całkiem pewien, że na 64-bitowej platformie, 'uint64_t' jest zdefiniowany jako' unsigned long', a zatem nie jest w konflikcie z 'unsigned long long', podczas gdy na 32-bitowej platformie,' uint64_t' musi być 'unsigned long long', podając swój błąd – NiBZ