Improved error diagnostics. Made depdendent predicates work on most compilers. Made optional deduced parameters fail SFINAE when an unmatched parameter is supplied.