// { dg-do compile } class FloatPoint; class Path { public: ~Path(); void moveTo(const FloatPoint&); static void createEllipse(const FloatPoint& center, float rx, float ry); }; extern "C" { extern float cosf (float); extern float sinf (float); } const float piFloat = static_cast(3.14159265358979323846); class FloatPoint { public: FloatPoint(float x, float y) : m_x(x), m_y(y) { } float x() const; float y() const; float m_x, m_y; }; void Path::createEllipse(const FloatPoint& center, float rx, float ry) { float cx = center.x(); float cy = center.y(); Path path; float x = cx; float y = cy; unsigned step = 0, num = 100; while (1) { float angle = static_cast(step) / num * 2.0f * piFloat; x = cx + cosf(angle) * rx; y = cy + sinf(angle) * ry; step++; if (step == 1) path.moveTo(FloatPoint(x, y)); } }