Quello che mi lascia perplesso è:
in questa definizione:codice:0 ? a : b
a rigor di logica, sia a compile time sia a run time il valore scelto sarà sempre b.codice:typedef typename cond<sizeof check(0 ? a : b, 0), A, B>::type
Detto questo ti trovi davanti a meta programmazione template che non è semplice da capire.
1) char[1] indica la dimensione di un array, non un classico array C (in questo caso: 1 appunto).
2) L'operatore ternario (ammesso che qui serva), non restituisce una classe ma sceglie un parametro da passare a check (in apparenza sempre b).
3) a fare quello che fa sempre: restituire una dimensione (di identity in questo caso).
Dati due tipi A e B, dove A != B, il compilatore cerca una definizione di check compatibile con i tipi dati (in apparenza il solo B), sizeof restituisce la dimensione del tipo di ritorno (il char[n] corrispondente), e il tutto viene inoltrato a cond (o meglio a una sua specializzazione).
In base alla specializzazione scelta dal compilatore si avrà la scelta del tipo di dato tra A e B (in apparenza almeno perché ci sono cose che mi lasciano un pò perplesso sul funzionamento, ma non ci metto la mano sul fuoco).