use crate::collect::PlaceholderHirTyCollector;
use crate::middle::resolve_lifetime as rl;
use crate::require_c_abi_if_c_variadic;
+use rustc_ast::ast::ParamKindOrd;
use rustc_ast::util::lev_distance::find_best_match_for_name;
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
use rustc_errors::ErrorReported;
arg.descr(),
kind,
);
+
+ let kind_ord = match kind {
+ "lifetime" => ParamKindOrd::Lifetime,
+ "type" => ParamKindOrd::Type,
+ "constant" => ParamKindOrd::Const,
+ _ => panic!(),
+ };
+ let arg_ord = match arg {
+ GenericArg::Lifetime(_) => ParamKindOrd::Lifetime,
+ GenericArg::Type(_) => ParamKindOrd::Type,
+ GenericArg::Const(_) => ParamKindOrd::Const,
+ };
+
// This note will be true as long as generic parameters are strictly ordered by their kind.
- err.note(&format!("{} arguments must be provided before {} arguments", kind, arg.descr()));
+ let (first, last) =
+ if kind_ord < arg_ord { (kind, arg.descr()) } else { (arg.descr(), kind) };
+ err.note(&format!("{} arguments must be provided before {} arguments", first, last));
err.emit();
}
LL | struct Cl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<T, 'a, A=(), B=(), C=(), U, 'b, V, 'c>> {
| ^^
|
- = note: type arguments must be provided before lifetime arguments
+ = note: lifetime arguments must be provided before type arguments
error[E0747]: lifetime provided when a type was expected
--> $DIR/suggest-move-types.rs:82:56
LL | struct Dl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<T, 'a, A=(), B=(), U, 'b, C=(), V, 'c>> {
| ^^
|
- = note: type arguments must be provided before lifetime arguments
+ = note: lifetime arguments must be provided before type arguments
error: aborting due to 12 previous errors