The croissant sandwich asks a laminated pastry to do a job it was not built for, and the whole thing turns on whether the structure survives. A croissant is hundreds of thin layers of butter and dough shattering away from each other; that is its pleasure and its problem. Split it, load it with ham and a slice of cheese, and the same flaking that makes it good as a pastry makes it precarious as a sandwich, because every bite tends to crush the shell and send a drift of shards down the front of you. The filling is conventional café fare. The defining fact is the bread refusing to behave like bread.
The craft is managing the flake and the fat. A croissant is already saturated with butter, so the build adds no spread; the pastry supplies its own richness, and a slick of anything more turns it greasy. It is usually warmed so the layers loosen and the cheese softens against them, which also helps the two halves grip the filling rather than sliding apart under the first bite. The split is shallow and the load is kept light, because a croissant overstuffed splits along its curve and collapses, and the ham is laid flat so it does not lever the structure open. The cheese earns its place here as much for adhesion as for flavour, melting just enough to tack the layers together so the sandwich holds its shape from the counter to the hand. A croissant filled and left to sit goes leathery and damp, the layers fusing into something heavy, so it is a sandwich made close to when it is eaten.
The variations follow the pastry case. The almond croissant takes the same idea sweet; jam and butter is the plain breakfast version; an egg folded in turns it into a hot morning build. Each treats the croissant as the structure and changes what it carries, and each deserves its own article rather than being crowded in here.