Is the problem with #[allow] in particular, or false positives in general?
For example, dead_code lint is warn-by-default, but some of dead fields it detects are legitimate. One example is _marker field of std::thread::JoinGuard. Since the lint skips things named with a leading underscore, _marker field is equivalent to marker field with #[allow(dead_code)]. Should dead_code lint be allow-by-default, or it’s fine because you don’t need to write #[allow(dead_code)]?
Another example is unused_must_use lint (also warn-by-default), which can be evaded by let _ = .... For the current lint in question, unused_type_parameters lint, it would be easy to skip type parameters named with a leading underscore, like _T. Then you would never need to write #[allow(unused_type_parameters)].