Not true, the intersection (boolean AND) of two convex objects is always convex. And the intersection of two concave objects without holes will also not contain holes (but can contain isles)
Hm. I agree for the AND case, but the intersection can contain isles and holes. Just intersect a triangle with another triangle. One of them should be contained in the other. This will "stencil" out the inner triangle of the outer leaving a hole.
I've done quite a lot of work on such algorithms (tesselation and 2d csg), and they are not simple. Let alone write one that is numerical stable with real world data.
These kind of algorithms are incredibly hard to write. You have to deal with lots of pesky details such as double vertices, back and forth edges, double and tripple intersections (three lines cross at exactly one point) and other corner cases. There are some cases that don't have a logical solution at all, and all you can do is to write an algorithm that at least outputs usefull data.
Once that's done the real numerical pain starts: If you ever start to create new vertices by intersection the slope of the lines you've just splitted slightly changes due to roundoff errors and the finite precision of floats. This can (and in practice will) create new intersections that wheren't there before. You need either to do brute force intersection or re-test all affected geometry). If your code is not prepared for that, you can be sure it will halt at a later stage (during extracting of resulting outlines for example).
Simple hacks won't work but will just open a can of worms. The more you hack, the more worms/bugs you will get.
And that still does not solve the problem of intersections that have no definate solution.
To write a polygon clipping algorithm that does not suck is not as simple as to follow the textbook algorithm: e.g. outline traversal, intersection-detection, adding new vertices and then a final inside/outside extraction. That might work for test data and is fine for a university course, but in practice it will break.
As an example how hard it can be: how is the intersection of these two little quads (in CW-order)
A: \<0,0>, \<10,0>, \<10,10>, \<0,10>
B: \<0,3>, \<6,3>, \<6,7>, \<0,7>