Diagnosable validity -- Andrzej KrzemieĊski
Andrzej Krzemieński wrote down his thoughts on ill-formed C++ code.
Diagnosable validity
by Andrzej Krzemieński
From the article:
Certain combinations of types and expressions can make a C++ program ill-formed. “Ill-formed” is a term taken from the C++ Standard and it means that a program is not valid, and compiler must (in most of the cases) reject it. This is quite obvious:
int main() { auto i = "some text".size(); // invalid expression };String literals do not have member functions, therefore compiler cannot accept this program, and must report an error. This puts a responsibility on programmers to learn which expressions and types are valid in a given context and use only these. Again, I am saying a very obvious thing.
What is less obvious is that there is a way in C++ to enter a type or expression of which we do not know if it is valid or not, in an isolated environment, where it does not render the entire program ill-formed, but instead it returns a yes-no (or rather valid-invalid) answer, which we can use at compile-time to make a decision how we want the program to behave. When requested, compiler can analyze all the declarations it has seen so far, and make an approximated judgement whether a given type or expression would make the program ill-formed or not, if used outside the isolated environment. The compiler’s approximated answer is not always correct, but it is just enough most of the time.


Have you registered for CppCon 2016 in September? Don’t delay –
Have you registered for CppCon 2016 in September? Don’t delay – 
Have you registered for CppCon 2016 in September? Don’t delay –