The buffer->text->monospace flag is likewise implemented based on
simplistic assumptions: that only text properties could violate the
"monospace-ness" attribute. Here's why this is simplistic:
. faces can be applied by overlays as well
. faces can be applied directly by C code
. faces can be applied by using glyphs from display-tables
. even if we only have the default face, fonts used for various
non-ASCII characters can have different metrics from the default face's
font, and in some cases they can even be variable-pitch fonts
. portions of display can be made invisible by selective-display, not
just by 'invisible' properties
(I'm not claiming that the above is the exhaustive list of all the
reasons that the assumptions in behaved_p could be violated; there could
be more of them.)