Hallo Christian,
- verboses und viel kompliziertes Typsystem Du meinst wegen der Ausgaben bei Fehlern? Insgesamt ziehe ich starke Typisierung einer dynamischen Typisierung vor.
Das sehe ich auch so, aber das Typ-System ist einfach zu komplex; wie gesagt, Templates sind in C++11 Turing-Vollständig. Das Typ-System(!) ist Turing-Vollständig. Mal abgesehen davon, dass das Typ-System nicht viel wert ist, wenn ich jederzeit ein (int *)(void *)
machen kann:
➜ ckruse@vali ~ % cat test.cpp
#include <iostream>
int main(void) {
float a = 1.0;
int *b = (int *)(void *)&a;
std::cout << *b << "\n";
return 0;
}
➜ ckruse@vali ~ % g++ -Wall -o test test.cpp
➜ ckruse@vali ~ % ./test
1065353216
➜ ckruse@vali ~ %
Der Umweg über (void *)
um zu verdeutlichen, dass ich wirklich beliebige Objekte casten kann.
Beispiele für gute Typ-Systeme sind IMHO Haskell und Rust (wobei sich Rust sehr stark bei Haskell bedient hat).
LG,
CK