Language: C++

#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
// ------ Classes ------ //
class Point {
public:
	long double px, py;
	Point(long double px_, long double py_) : px(px_), py(py_) {};
	friend bool operator==(const Point& p1, const Point& p2) { return p1.px == p2.px && p1.py == p2.py; }
	friend bool operator!=(const Point& p1, const Point& p2) { return p1.px != p2.px || p1.py != p2.py; }
	friend Point operator+(const Point& p1, const Point& p2) { return Point(p1.px + p2.px, p1.py + p2.py); }
	friend Point operator-(const Point& p1, const Point& p2) { return Point(p1.px - p2.px, p1.py - p2.py); }
	friend Point operator*(const Point& p1, long double d) { return Point(p1.px * d, p1.py + d); }
	friend Point operator*(long double d, const Point& p1) { return p1 * d; }
	friend Point operator/(const Point& p1, long double d) { return Point(p1.px / d, p1.py / d); }
	Point& operator+=(const Point& p1) { px += p1.px; py += p1.py; return *this; }
	Point& operator-=(const Point& p1) { px -= p1.px; py -= p1.py; return *this; }
	Point& operator*=(long double d) { px *= d; py *= d; return *this; }
	Point& operator/=(long double d) { px /= d; py /= d; return *this; }
};
class Segment {
public:
	Point p1, p2;
	Segment(Point p1_, Point p2_) : p1(p1_), p2(p2_) {};
	Segment(long double p1x, long double p1y, long double p2x, long double p2y) : p1(Point(p1x, p1y)), p2(Point(p2x, p2y)) {};
	friend bool operator==(const Segment& s1, const Segment& s2) { return (s1.p1 == s2.p1 && s1.p2 == s2.p2) || (s1.p1 == s2.p2 && s1.p2 == s2.p1); }
	friend bool operator!=(const Segment& s1, const Segment& s2) { return !(s1 == s2); }
};
class Line {
public:
	Point p1, p2;
	Line(Point p1_, Point p2_) : p1(p1_), p2(p2_) {};
	Line(long double p1x, long double p1y, long double p2x, long double p2y) : p1(Point(p1x, p1y)), p2(Point(p2x, p2y)) {};
	friend bool operator==(const Line& s1, const Line& s2) { return (s1.p1 == s2.p1 && s1.p2 == s2.p2) || (s1.p1 == s2.p2 && s1.p2 == s2.p1); }
	friend bool operator!=(const Line& s1, const Line& s2) { return !(s1 == s2); }
};
// ------ Functions ------ //
long double norm(const Point& a) { return a.px * a.px + a.py * a.py; }
long double abs(const Point& a) { return sqrtl(norm(a)); }
long double dot(const Point& a, const Point& b) { return a.px * b.px + a.py * b.py; }
long double crs(const Point& a, const Point& b) { return a.px * b.py - a.py * b.px; }
int ccw(Point p0, Point p1, Point p2) {
	Point a = p1 - p0, b = p2 - p0;
	if (crs(a, b) > 1e-10) return 1;
	if (crs(a, b) < -1e-10) return -1;
	if (dot(a, b) < -1e-10) return 2;
	if (norm(a) < norm(b)) return -2;
	return 0;
}
// ------ Main ------ //
Point p1, p2, p3, p4; int r1, r2, r3, r4;
int main() {
	while (~scanf("%Lf,%Lf,%Lf,%Lf,%Lf,%Lf,%Lf,%Lf", p1.px, p1.py, p2.px, p2.py, p3.px, p3.py, p4.px, p4.py)) {
		r1 = ccw(p1, p2, p3);
		r2 = ccw(p2, p3, p4);
		r3 = ccw(p3, p4, p1);
		r4 = ccw(p4, p1, p2);
		printf("%s\n", (r1 == r2 && r2 == r3 && r3 == r4 && abs(r1) == 1) ? "YES" : "NO");
	}
	return 0;
}

Compiler output:
a.cc:52:7: error: no matching function for call to 'Point::Point()'
   52 | Point p1, p2, p3, p4; int r1, r2, r3, r4;
      |       ^~
a.cc:9:9: note: candidate: 'Point::Point(long double, long double)'
    9 |         Point(long double px_, long double py_) : px(px_), py(py_) {};
      |         ^~~~~
a.cc:9:9: note:   candidate expects 2 arguments, 0 provided
a.cc:6:7: note: candidate: 'constexpr Point::Point(const Point&)'
    6 | class Point {
      |       ^~~~~
a.cc:6:7: note:   candidate expects 1 argument, 0 provided
a.cc:6:7: note: candidate: 'constexpr Point::Point(Point&&)'
a.cc:6:7: note:   candidate expects 1 argument, 0 provided
a.cc:52:11: error: no matching function for call to 'Point::Point()'
   52 | Point p1, p2, p3, p4; int r1, r2, r3, r4;
      |           ^~
a.cc:9:9: note: candidate: 'Point::Point(long double, long double)'
    9 |         Point(long double px_, long double py_) : px(px_), py(py_) {};
      |         ^~~~~
a.cc:9:9: note:   candidate expects 2 arguments, 0 provided
a.cc:6:7: note: candidate: 'constexpr Point::Point(const Point&)'
    6 | class Point {
      |       ^~~~~
a.cc:6:7: note:   candidate expects 1 argument, 0 provided
a.cc:6:7: note: candidate: 'constexpr Point::Point(Point&&)'
a.cc:6:7: note:   candidate expects 1 argument, 0 provided
a.cc:52:15: error: no matching function for call to 'Point::Point()'
   52 | Point p1, p2, p3, p4; int r1, r2, r3, r4;
      |               ^~
a.cc:9:9: note: candidate: 'Point::Point(long double, long double)'
    9 |         Point(long double px_, long double py_) : px(px_), py(py_) {};
      |         ^~~~~
a.cc:9:9: note:   candidate expects 2 arguments, 0 provided
a.cc:6:7: note: candidate: 'constexpr Point::Point(const Point&)'
    6 | class Point {
      |       ^~~~~
a.cc:6:7: note:   candidate expects 1 argument, 0 provided
a.cc:6:7: note: candidate: 'constexpr Point::Point(Point&&)'
a.cc:6:7: note:   candidate expects 1 argument, 0 provided
a.cc:52:19: error: no matching function for call to 'Point::Point()'
   52 | Point p1, p2, p3, p4; int r1, r2, r3, r4;
      |                   ^~
a.cc:9:9: note: candidate: 'Point::Point(long double, long double)'
    9 |         Point(long double px_, long double py_) : px(px_), py(py_) {};
      |         ^~~~~
a.cc:9:9: note:   candidate expects 2 arguments, 0 provided
a.cc:6:7: note: candidate: 'constexpr Point::Point(const Point&)'
    6 | class Point {
      |       ^~~~~
a.cc:6:7: note:   candidate expects 1 argument, 0 provided
a.cc:6:7: note: candidate: 'constexpr Point::Point(Point&&)'
a.cc:6:7: note:   candidate expects 1 argument, 0 provided