Because they can constrain the design of the language, and make it more complex to reason about the language.  Look at the language necessary to explain their pitfalls in the C standard, or the extra copy needed in operator++(int) to support post semantics in C++.<p>They also make the tools that consume that language slightly more complex.  It doesn&#x27;t sound like much, but in aggregate it&#x27;s the difference between writing a parser for Java vs. a parser for C++.