C++20 concepts are structural: What, why, and how to change it?
C++20 added concepts as a language feature. They’re often compared to Haskell’s type classes, Rust’s traits or Swift’s protocols.
Yet there is one feature that sets them apart: types model C++ concepts automatically.
In Haskell, you need an
instance, in Rust, you need an
impl, and in Swift, you need an
But in C++? In C++, concepts are just fancy boolean predicates that check for well-formed syntax:
every type that makes the syntax well-formed passes the predicate and thus models the concepts.
This was the correct choice, but is sometimes not what you want. Let’s explore it further.» read more »