Хотя я не мог воспроизвести точную ошибку OP, я столкнулся с подобной ошибкой в компиляторах HP-UX aCC. Я написал об этом на досках HP и в итоге получил ответ от HP. В основном их версии 3.xx (3.70, 3.73, 3.67 и т. Д.) ACC испортили конструкцию std :: string. Нам пришлось перейти на версии 6.xx компилятора. Проблема, с которой мы столкнулись в то время, заключалась в том, что для машин PA-RISC не было компилятора 6.xx, а был только Itanium. Я считаю, что компилятор 6.xx был выпущен для PA-RISC в сентябре 2007 года.
Код, который вызывал проблему, был:
#include <iostream>
#include <string>
class S : public std::string // An extension of std::string
{
public:
explicit S(const char* s)
: std::string(s)
{
}
};
class N // Wraps an int
{
public:
explicit N(int n)
: _n(n)
{}
operator S() const // Converts to a string extension
{
return _n == 0 ? S("zero") : (_n == 1 ? S("one") : S("other"));
}
private:
int _n;
};
int main(int, char**)
{
N n0 = N(0);
N n1 = N(1);
std::string zero = n0;
std::cout << "zero = " << zero << std::endl;
std::string one = n1;
std::cout << "zero = " << zero
<< ", one = " << one << std::endl;
return 0;
}
Это была печать:
ноль = ноль
ноль = один , один = один
Другими словами, конструкция строки один из n1 полностью перекрывала другую строку (строка ноль).
ПРИМЕЧАНИЯ:
Чтобы увидеть версию компилятора, введите «aCC -V»
Чтобы увидеть тип машины, введите «uname -m» (9000/800 ==> PA-RISC, ia64 ==> Itanium)