#include <gmpxx.h>
int main() {
mpq_class a("1/-2");
mpq_class b("1/-3");
mpq_class c = a + b;
printf("%s\n", c.get_str().c_str());
}
GMP のマニュアルによると、無効な表現文字列がコンストラクタに渡されると、例外が発生するはずです。ただし、この場合、GMP はそうではありません。
さらに、Segfault につながる以下のコードを試してください。
#include <gmpxx.h>
class Container {
public:
mpq_class rat;
Container(mpq_class _rat) : rat(_rat) {}
};
int main() {
mpq_class a("1/-3");
Container *c = new Container(a);
}
バグですか?GMP は非常によく知られているため、簡単にクラッシュするとは信じられませんでした。