1. clang does not support forward declared types in templates (http://clang.llvm.org/compatibility.html#undep_incomplete)
2. clang does not support default values for forward declared types