C++ Pattern Matching Proposal
Jun 24, 2020
A language that I am working on has those things "built-in" (it still generates compilable C++ in the backend). I did recently add pattern matching (and not just on variants) where the above would be equivalent to:If a type repeats in the same variant, you would match by index to tell them apart:$v:|[:int, :bool, :double] = 5; $vi: = v.[:int]; $holds_int: = v.?[:int]; switch v { .[:int]$i { /std cout << "got int:" << i }; .[:bool] { /std cout << "got bool" }; .[:double]$d { /std cout << "got double: " << d }; };
(I have some ideas to allow named labels instead of numerical indices but that is not yet implemented)$v:|[:int, :int]<(.[0] = 5); switch v { .[0]$i0 { /std cout << "got first int:" << i0 }; .[1]$i1 { /std cout << "got second int: " << i1 }; };
It is, in spirit, an implementation of the inspect proposal [1], but with a (subjectively) much simpler and more powerful syntax (the grammar of the entire language is fully LALR(1) without ambiguities).
[1] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p137...