Open
Description
These are definitions which compile with plain rustc
, but not creusot
:
use creusot_contracts::*;
pub fn min<O: PartialOrd>(a: O, b: O) -> O {
if a < b {
a
} else {
b
}
}
Error message:
error[E0277]: the trait bound `O: creusot_contracts::DeepModel` is not satisfied
--> src/lib.rs:11:8
|
11 | if a < b {
| ^^^^^ the trait `creusot_contracts::DeepModel` is not implemented for `O`
error[E0277]: the trait bound `<O as creusot_contracts::DeepModel>::DeepModelTy: creusot_contracts::OrdLogic` is not satisfied
--> src/lib.rs:11:8
|
11 | if a < b {
| ^^^^^ the trait `creusot_contracts::OrdLogic` is not implemented for `<O as creusot_contracts::DeepModel>::DeepModelTy`
use creusot_contracts::*;
pub fn f<I: Iterator>(i: &mut I) {
for _ in i {}
}
(Adding a #[invariant(true)]
doesn't help)
Error message:
error[E0277]: the trait bound `<&mut I as std::iter::IntoIterator>::IntoIter: creusot_contracts::Iterator` is not satisfied
--> src/lib.rs:12:14
|
12 | for _ in i {}
| ^ the trait `creusot_contracts::Iterator` is not implemented for `<&mut I as std::iter::IntoIterator>::IntoIter`
error[E0277]: the trait bound `&mut I: creusot_contracts::IntoIterator` is not satisfied
--> src/lib.rs:12:14
|
12 | for _ in i {}
| ^ the trait `creusot_contracts::Iterator` is not implemented for `&mut I`, which is required by `&mut I: creusot_contracts::IntoIterator`
|
= help: the following other types implement trait `creusot_contracts::Iterator`:
creusot_contracts::std::iter::MapInv<I, <I as std::iter::Iterator>::Item, F>
std::collections::vec_deque::Iter<'a, T>
std::iter::Cloned<I>
std::iter::Copied<I>
std::iter::Empty<T>
std::iter::Enumerate<I>
std::iter::Filter<I, F>
std::iter::Fuse<I>
and 14 others
= note: required for `&mut I` to implement `creusot_contracts::IntoIterator`
error[E0277]: the trait bound `&mut I: creusot_contracts::Iterator` is not satisfied
--> src/lib.rs:12:14
|
12 | for _ in i {}
| ^ the trait `creusot_contracts::Iterator` is not implemented for `&mut I`
|
= help: the following other types implement trait `creusot_contracts::Iterator`:
creusot_contracts::std::iter::MapInv<I, <I as std::iter::Iterator>::Item, F>
std::collections::vec_deque::Iter<'a, T>
std::iter::Cloned<I>
std::iter::Copied<I>
std::iter::Empty<T>
std::iter::Enumerate<I>
std::iter::Filter<I, F>
std::iter::Fuse<I>
and 14 others