summaryrefslogtreecommitdiffstats
path: root/tests/ui/ufcs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/ufcs')
-rw-r--r--tests/ui/ufcs/ufcs-partially-resolved.rs44
-rw-r--r--tests/ui/ufcs/ufcs-partially-resolved.stderr190
-rw-r--r--tests/ui/ufcs/ufcs-polymorphic-paths.rs154
3 files changed, 293 insertions, 95 deletions
diff --git a/tests/ui/ufcs/ufcs-partially-resolved.rs b/tests/ui/ufcs/ufcs-partially-resolved.rs
index e6470aa6d..712668728 100644
--- a/tests/ui/ufcs/ufcs-partially-resolved.rs
+++ b/tests/ui/ufcs/ufcs-partially-resolved.rs
@@ -17,37 +17,37 @@ type A = u32;
fn main() {
let _: <u8 as Tr>::N; //~ ERROR cannot find associated type `N` in trait `Tr`
- let _: <u8 as E>::N; //~ ERROR cannot find associated type `N` in enum `E`
- let _: <u8 as A>::N; //~ ERROR cannot find associated type `N` in `A`
+ let _: <u8 as E>::N; //~ ERROR expected trait, found enum `E`
+ let _: <u8 as A>::N; //~ ERROR expected trait, found type alias `A`
<u8 as Tr>::N; //~ ERROR cannot find method or associated constant `N` in trait `Tr`
- <u8 as E>::N; //~ ERROR cannot find method or associated constant `N` in enum `E`
- <u8 as A>::N; //~ ERROR cannot find method or associated constant `N` in `A`
+ <u8 as E>::N; //~ ERROR expected trait, found enum `E`
+ <u8 as A>::N; //~ ERROR expected trait, found type alias `A`
let _: <u8 as Tr>::Y; // OK
- let _: <u8 as E>::Y; //~ ERROR expected associated type, found variant `E::Y`
+ let _: <u8 as E>::Y; //~ ERROR expected trait, found enum `E`
<u8 as Tr>::Y; // OK
- <u8 as E>::Y; //~ ERROR expected method or associated constant, found unit variant `E::Y`
+ <u8 as E>::Y; //~ ERROR expected trait, found enum `E`
let _: <u8 as Tr>::N::NN; //~ ERROR cannot find associated type `N` in trait `Tr`
- let _: <u8 as E>::N::NN; //~ ERROR cannot find associated type `N` in enum `E`
- let _: <u8 as A>::N::NN; //~ ERROR cannot find associated type `N` in `A`
+ let _: <u8 as E>::N::NN; //~ ERROR expected trait, found enum `E`
+ let _: <u8 as A>::N::NN; //~ ERROR expected trait, found type alias `A`
<u8 as Tr>::N::NN; //~ ERROR cannot find associated type `N` in trait `Tr`
- <u8 as E>::N::NN; //~ ERROR cannot find associated type `N` in enum `E`
- <u8 as A>::N::NN; //~ ERROR cannot find associated type `N` in `A`
+ <u8 as E>::N::NN; //~ ERROR expected trait, found enum `E`
+ <u8 as A>::N::NN; //~ ERROR expected trait, found type alias `A`
let _: <u8 as Tr>::Y::NN; //~ ERROR ambiguous associated type
- let _: <u8 as E>::Y::NN; //~ ERROR expected associated type, found variant `E::Y`
+ let _: <u8 as E>::Y::NN; //~ ERROR expected trait, found enum `E`
<u8 as Tr>::Y::NN; //~ ERROR no associated item named `NN` found for type `u16`
- <u8 as E>::Y::NN; //~ ERROR expected associated type, found variant `E::Y`
+ <u8 as E>::Y::NN; //~ ERROR expected trait, found enum `E`
- let _: <u8 as Tr::N>::NN; //~ ERROR cannot find associated type `NN` in `Tr::N`
- let _: <u8 as E::N>::NN; //~ ERROR cannot find associated type `NN` in `E::N`
- let _: <u8 as A::N>::NN; //~ ERROR cannot find associated type `NN` in `A::N`
- <u8 as Tr::N>::NN; //~ ERROR cannot find method or associated constant `NN` in `Tr::N`
- <u8 as E::N>::NN; //~ ERROR cannot find method or associated constant `NN` in `E::N`
- <u8 as A::N>::NN; //~ ERROR cannot find method or associated constant `NN` in `A::N`
- let _: <u8 as Tr::Y>::NN; //~ ERROR cannot find associated type `NN` in `Tr::Y`
- let _: <u8 as E::Y>::NN; //~ ERROR failed to resolve: `Y` is a variant, not a module
- <u8 as Tr::Y>::NN; //~ ERROR cannot find method or associated constant `NN` in `Tr::Y`
- <u8 as E::Y>::NN; //~ ERROR failed to resolve: `Y` is a variant, not a module
+ let _: <u8 as Tr::N>::NN; //~ ERROR cannot find trait `N` in trait `Tr`
+ let _: <u8 as E::N>::NN; //~ ERROR cannot find trait `N` in enum `E`
+ let _: <u8 as A::N>::NN; //~ ERROR cannot find trait `N` in `A`
+ <u8 as Tr::N>::NN; //~ ERROR cannot find trait `N` in trait `Tr`
+ <u8 as E::N>::NN; //~ ERROR cannot find trait `N` in enum `E`
+ <u8 as A::N>::NN; //~ ERROR cannot find trait `N` in `A`
+ let _: <u8 as Tr::Y>::NN; //~ ERROR expected trait, found associated type `Tr::Y
+ let _: <u8 as E::Y>::NN; //~ ERROR expected trait, found variant `E::Y`
+ <u8 as Tr::Y>::NN; //~ ERROR expected trait, found associated type `Tr::Y`
+ <u8 as E::Y>::NN; //~ ERROR expected trait, found variant `E::Y`
let _: <u8 as Dr>::Z; //~ ERROR expected associated type, found associated function `Dr::Z`
<u8 as Dr>::X; //~ ERROR expected method or associated constant, found associated type `Dr::X`
diff --git a/tests/ui/ufcs/ufcs-partially-resolved.stderr b/tests/ui/ufcs/ufcs-partially-resolved.stderr
index 72fccea8a..eef55c8dc 100644
--- a/tests/ui/ufcs/ufcs-partially-resolved.stderr
+++ b/tests/ui/ufcs/ufcs-partially-resolved.stderr
@@ -1,15 +1,3 @@
-error[E0433]: failed to resolve: `Y` is a variant, not a module
- --> $DIR/ufcs-partially-resolved.rs:48:22
- |
-LL | let _: <u8 as E::Y>::NN;
- | ^ `Y` is a variant, not a module
-
-error[E0433]: failed to resolve: `Y` is a variant, not a module
- --> $DIR/ufcs-partially-resolved.rs:50:15
- |
-LL | <u8 as E::Y>::NN;
- | ^ `Y` is a variant, not a module
-
error[E0576]: cannot find associated type `N` in trait `Tr`
--> $DIR/ufcs-partially-resolved.rs:19:24
|
@@ -19,17 +7,25 @@ LL | type Y = u16;
LL | let _: <u8 as Tr>::N;
| ^ help: an associated type with a similar name exists: `Y`
-error[E0576]: cannot find associated type `N` in enum `E`
- --> $DIR/ufcs-partially-resolved.rs:20:23
+error[E0404]: expected trait, found enum `E`
+ --> $DIR/ufcs-partially-resolved.rs:20:19
|
LL | let _: <u8 as E>::N;
- | ^ not found in `E`
+ | ^ help: a trait with a similar name exists: `Eq`
+ --> $SRC_DIR/core/src/cmp.rs:LL:COL
+ |
+ = note: similarly named trait `Eq` defined here
-error[E0576]: cannot find associated type `N` in `A`
- --> $DIR/ufcs-partially-resolved.rs:21:23
+error[E0404]: expected trait, found type alias `A`
+ --> $DIR/ufcs-partially-resolved.rs:21:19
|
LL | let _: <u8 as A>::N;
- | ^ not found in `A`
+ | ^ type aliases cannot be used as traits
+ |
+help: you might have meant to use `#![feature(trait_alias)]` instead of a `type` alias
+ |
+LL | trait A = u32;
+ |
error[E0576]: cannot find method or associated constant `N` in trait `Tr`
--> $DIR/ufcs-partially-resolved.rs:22:17
@@ -40,29 +36,43 @@ LL | fn Y() {}
LL | <u8 as Tr>::N;
| ^ help: an associated function with a similar name exists: `Y`
-error[E0576]: cannot find method or associated constant `N` in enum `E`
- --> $DIR/ufcs-partially-resolved.rs:23:16
+error[E0404]: expected trait, found enum `E`
+ --> $DIR/ufcs-partially-resolved.rs:23:12
|
LL | <u8 as E>::N;
- | ^ not found in `E`
+ | ^ help: a trait with a similar name exists: `Eq`
+ --> $SRC_DIR/core/src/cmp.rs:LL:COL
+ |
+ = note: similarly named trait `Eq` defined here
-error[E0576]: cannot find method or associated constant `N` in `A`
- --> $DIR/ufcs-partially-resolved.rs:24:16
+error[E0404]: expected trait, found type alias `A`
+ --> $DIR/ufcs-partially-resolved.rs:24:12
|
LL | <u8 as A>::N;
- | ^ not found in `A`
+ | ^ type aliases cannot be used as traits
+ |
+help: you might have meant to use `#![feature(trait_alias)]` instead of a `type` alias
+ |
+LL | trait A = u32;
+ |
-error[E0575]: expected associated type, found variant `E::Y`
- --> $DIR/ufcs-partially-resolved.rs:26:12
+error[E0404]: expected trait, found enum `E`
+ --> $DIR/ufcs-partially-resolved.rs:26:19
|
LL | let _: <u8 as E>::Y;
- | ^^^^^^^^^^^^ not a associated type
+ | ^ help: a trait with a similar name exists: `Eq`
+ --> $SRC_DIR/core/src/cmp.rs:LL:COL
+ |
+ = note: similarly named trait `Eq` defined here
-error[E0575]: expected method or associated constant, found unit variant `E::Y`
- --> $DIR/ufcs-partially-resolved.rs:28:5
+error[E0404]: expected trait, found enum `E`
+ --> $DIR/ufcs-partially-resolved.rs:28:12
|
LL | <u8 as E>::Y;
- | ^^^^^^^^^^^^ not a method or associated constant
+ | ^ help: a trait with a similar name exists: `Eq`
+ --> $SRC_DIR/core/src/cmp.rs:LL:COL
+ |
+ = note: similarly named trait `Eq` defined here
error[E0576]: cannot find associated type `N` in trait `Tr`
--> $DIR/ufcs-partially-resolved.rs:30:24
@@ -73,17 +83,25 @@ LL | type Y = u16;
LL | let _: <u8 as Tr>::N::NN;
| ^ help: an associated type with a similar name exists: `Y`
-error[E0576]: cannot find associated type `N` in enum `E`
- --> $DIR/ufcs-partially-resolved.rs:31:23
+error[E0404]: expected trait, found enum `E`
+ --> $DIR/ufcs-partially-resolved.rs:31:19
|
LL | let _: <u8 as E>::N::NN;
- | ^ not found in `E`
+ | ^ help: a trait with a similar name exists: `Eq`
+ --> $SRC_DIR/core/src/cmp.rs:LL:COL
+ |
+ = note: similarly named trait `Eq` defined here
-error[E0576]: cannot find associated type `N` in `A`
- --> $DIR/ufcs-partially-resolved.rs:32:23
+error[E0404]: expected trait, found type alias `A`
+ --> $DIR/ufcs-partially-resolved.rs:32:19
|
LL | let _: <u8 as A>::N::NN;
- | ^ not found in `A`
+ | ^ type aliases cannot be used as traits
+ |
+help: you might have meant to use `#![feature(trait_alias)]` instead of a `type` alias
+ |
+LL | trait A = u32;
+ |
error[E0576]: cannot find associated type `N` in trait `Tr`
--> $DIR/ufcs-partially-resolved.rs:33:17
@@ -94,77 +112,103 @@ LL | type Y = u16;
LL | <u8 as Tr>::N::NN;
| ^ help: an associated type with a similar name exists: `Y`
-error[E0576]: cannot find associated type `N` in enum `E`
- --> $DIR/ufcs-partially-resolved.rs:34:16
+error[E0404]: expected trait, found enum `E`
+ --> $DIR/ufcs-partially-resolved.rs:34:12
|
LL | <u8 as E>::N::NN;
- | ^ not found in `E`
+ | ^ help: a trait with a similar name exists: `Eq`
+ --> $SRC_DIR/core/src/cmp.rs:LL:COL
+ |
+ = note: similarly named trait `Eq` defined here
-error[E0576]: cannot find associated type `N` in `A`
- --> $DIR/ufcs-partially-resolved.rs:35:16
+error[E0404]: expected trait, found type alias `A`
+ --> $DIR/ufcs-partially-resolved.rs:35:12
|
LL | <u8 as A>::N::NN;
- | ^ not found in `A`
+ | ^ type aliases cannot be used as traits
+ |
+help: you might have meant to use `#![feature(trait_alias)]` instead of a `type` alias
+ |
+LL | trait A = u32;
+ |
-error[E0575]: expected associated type, found variant `E::Y`
- --> $DIR/ufcs-partially-resolved.rs:37:12
+error[E0404]: expected trait, found enum `E`
+ --> $DIR/ufcs-partially-resolved.rs:37:19
|
LL | let _: <u8 as E>::Y::NN;
- | ^^^^^^^^^^^^^^^^ not a associated type
+ | ^ help: a trait with a similar name exists: `Eq`
+ --> $SRC_DIR/core/src/cmp.rs:LL:COL
+ |
+ = note: similarly named trait `Eq` defined here
-error[E0575]: expected associated type, found variant `E::Y`
- --> $DIR/ufcs-partially-resolved.rs:39:5
+error[E0404]: expected trait, found enum `E`
+ --> $DIR/ufcs-partially-resolved.rs:39:12
|
LL | <u8 as E>::Y::NN;
- | ^^^^^^^^^^^^^^^^ not a associated type
+ | ^ help: a trait with a similar name exists: `Eq`
+ --> $SRC_DIR/core/src/cmp.rs:LL:COL
+ |
+ = note: similarly named trait `Eq` defined here
-error[E0576]: cannot find associated type `NN` in `Tr::N`
- --> $DIR/ufcs-partially-resolved.rs:41:27
+error[E0405]: cannot find trait `N` in trait `Tr`
+ --> $DIR/ufcs-partially-resolved.rs:41:23
|
LL | let _: <u8 as Tr::N>::NN;
- | ^^ not found in `Tr::N`
+ | ^ not found in `Tr`
-error[E0576]: cannot find associated type `NN` in `E::N`
- --> $DIR/ufcs-partially-resolved.rs:42:26
+error[E0405]: cannot find trait `N` in enum `E`
+ --> $DIR/ufcs-partially-resolved.rs:42:22
|
LL | let _: <u8 as E::N>::NN;
- | ^^ not found in `E::N`
+ | ^ not found in `E`
-error[E0576]: cannot find associated type `NN` in `A::N`
- --> $DIR/ufcs-partially-resolved.rs:43:26
+error[E0405]: cannot find trait `N` in `A`
+ --> $DIR/ufcs-partially-resolved.rs:43:22
|
LL | let _: <u8 as A::N>::NN;
- | ^^ not found in `A::N`
+ | ^ not found in `A`
-error[E0576]: cannot find method or associated constant `NN` in `Tr::N`
- --> $DIR/ufcs-partially-resolved.rs:44:20
+error[E0405]: cannot find trait `N` in trait `Tr`
+ --> $DIR/ufcs-partially-resolved.rs:44:16
|
LL | <u8 as Tr::N>::NN;
- | ^^ not found in `Tr::N`
+ | ^ not found in `Tr`
-error[E0576]: cannot find method or associated constant `NN` in `E::N`
- --> $DIR/ufcs-partially-resolved.rs:45:19
+error[E0405]: cannot find trait `N` in enum `E`
+ --> $DIR/ufcs-partially-resolved.rs:45:15
|
LL | <u8 as E::N>::NN;
- | ^^ not found in `E::N`
+ | ^ not found in `E`
-error[E0576]: cannot find method or associated constant `NN` in `A::N`
- --> $DIR/ufcs-partially-resolved.rs:46:19
+error[E0405]: cannot find trait `N` in `A`
+ --> $DIR/ufcs-partially-resolved.rs:46:15
|
LL | <u8 as A::N>::NN;
- | ^^ not found in `A::N`
+ | ^ not found in `A`
-error[E0576]: cannot find associated type `NN` in `Tr::Y`
- --> $DIR/ufcs-partially-resolved.rs:47:27
+error[E0404]: expected trait, found associated type `Tr::Y`
+ --> $DIR/ufcs-partially-resolved.rs:47:19
|
LL | let _: <u8 as Tr::Y>::NN;
- | ^^ not found in `Tr::Y`
+ | ^^^^^ not a trait
+
+error[E0404]: expected trait, found variant `E::Y`
+ --> $DIR/ufcs-partially-resolved.rs:48:19
+ |
+LL | let _: <u8 as E::Y>::NN;
+ | ^^^^ not a trait
-error[E0576]: cannot find method or associated constant `NN` in `Tr::Y`
- --> $DIR/ufcs-partially-resolved.rs:49:20
+error[E0404]: expected trait, found associated type `Tr::Y`
+ --> $DIR/ufcs-partially-resolved.rs:49:12
|
LL | <u8 as Tr::Y>::NN;
- | ^^ not found in `Tr::Y`
+ | ^^^^^ not a trait
+
+error[E0404]: expected trait, found variant `E::Y`
+ --> $DIR/ufcs-partially-resolved.rs:50:12
+ |
+LL | <u8 as E::Y>::NN;
+ | ^^^^ not a trait
error[E0575]: expected associated type, found associated function `Dr::Z`
--> $DIR/ufcs-partially-resolved.rs:52:12
@@ -226,5 +270,5 @@ LL | <u8 as Dr>::X::N;
error: aborting due to 32 previous errors
-Some errors have detailed explanations: E0223, E0433, E0575, E0576, E0599.
+Some errors have detailed explanations: E0223, E0404, E0405, E0575, E0576, E0599.
For more information about an error, try `rustc --explain E0223`.
diff --git a/tests/ui/ufcs/ufcs-polymorphic-paths.rs b/tests/ui/ufcs/ufcs-polymorphic-paths.rs
new file mode 100644
index 000000000..a14ebd6a4
--- /dev/null
+++ b/tests/ui/ufcs/ufcs-polymorphic-paths.rs
@@ -0,0 +1,154 @@
+// run-pass
+
+use std::borrow::{Cow, ToOwned};
+use std::default::Default;
+use std::iter::FromIterator;
+use std::ops::Add;
+use std::option::IntoIter as OptionIter;
+
+pub struct XorShiftRng;
+use XorShiftRng as DummyRng;
+impl Rng for XorShiftRng {}
+pub trait Rng {}
+pub trait Rand: Default + Sized {
+ fn rand<R: Rng>(_rng: &mut R) -> Self { Default::default() }
+}
+impl Rand for i32 { }
+
+pub trait IntoCow<'a, B: ?Sized> where B: ToOwned {
+ fn into_cow(self) -> Cow<'a, B>;
+}
+
+impl<'a> IntoCow<'a, str> for String {
+ fn into_cow(self) -> Cow<'a, str> {
+ Cow::Owned(self)
+ }
+}
+
+#[derive(PartialEq, Eq)]
+struct Newt<T>(T);
+
+fn id<T>(x: T) -> T { x }
+fn eq<T: Eq>(a: T, b: T) -> bool { a == b }
+fn u8_as_i8(x: u8) -> i8 { x as i8 }
+fn odd(x: usize) -> bool { x % 2 == 1 }
+fn dummy_rng() -> DummyRng { XorShiftRng }
+
+trait Size: Sized {
+ fn size() -> usize { std::mem::size_of::<Self>() }
+}
+impl<T> Size for T {}
+
+#[derive(PartialEq, Eq)]
+struct BitVec;
+
+impl BitVec {
+ fn from_fn<F>(_: usize, _: F) -> BitVec where F: FnMut(usize) -> bool {
+ BitVec
+ }
+}
+
+#[derive(PartialEq, Eq)]
+struct Foo<T>(T);
+
+impl<T> Foo<T> {
+ fn map_in_place<U, F>(self, mut f: F) -> Foo<U> where F: FnMut(T) -> U {
+ Foo(f(self.0))
+ }
+
+}
+
+macro_rules! tests {
+ ($($expr:expr, $ty:ty, ($($test:expr),*);)+) => (pub fn main() {$({
+ const C: $ty = $expr;
+ static S: $ty = $expr;
+ assert!(eq(C($($test),*), $expr($($test),*)));
+ assert!(eq(S($($test),*), $expr($($test),*)));
+ assert!(eq(C($($test),*), S($($test),*)));
+ })+})
+}
+
+tests! {
+ // Free function.
+ id, fn(i32) -> i32, (5);
+ id::<i32>, fn(i32) -> i32, (5);
+
+ // Enum variant constructor.
+ Some, fn(i32) -> Option<i32>, (5);
+ Some::<i32>, fn(i32) -> Option<i32>, (5);
+
+ // Tuple struct constructor.
+ Newt, fn(i32) -> Newt<i32>, (5);
+ Newt::<i32>, fn(i32) -> Newt<i32>, (5);
+
+ // Inherent static methods.
+ Vec::new, fn() -> Vec<()>, ();
+ Vec::<()>::new, fn() -> Vec<()>, ();
+ <Vec<()>>::new, fn() -> Vec<()>, ();
+ Vec::with_capacity, fn(usize) -> Vec<()>, (5);
+ Vec::<()>::with_capacity, fn(usize) -> Vec<()>, (5);
+ <Vec<()>>::with_capacity, fn(usize) -> Vec<()>, (5);
+ BitVec::from_fn, fn(usize, fn(usize) -> bool) -> BitVec, (5, odd);
+ BitVec::from_fn::<fn(usize) -> bool>, fn(usize, fn(usize) -> bool) -> BitVec, (5, odd);
+
+ // Inherent non-static method.
+ Foo::map_in_place, fn(Foo<u8>, fn(u8) -> i8) -> Foo<i8>, (Foo(b'f'), u8_as_i8);
+ Foo::map_in_place::<i8, fn(u8) -> i8>, fn(Foo<u8>, fn(u8) -> i8) -> Foo<i8>,
+ (Foo(b'f'), u8_as_i8);
+ Foo::<u8>::map_in_place, fn(Foo<u8>, fn(u8) -> i8) -> Foo<i8>
+ , (Foo(b'f'), u8_as_i8);
+ Foo::<u8>::map_in_place::<i8, fn(u8) -> i8>, fn(Foo<u8>, fn(u8) -> i8) -> Foo<i8>
+ , (Foo(b'f'), u8_as_i8);
+
+ // Trait static methods.
+ bool::size, fn() -> usize, ();
+ <bool>::size, fn() -> usize, ();
+ <bool as Size>::size, fn() -> usize, ();
+
+ Default::default, fn() -> i32, ();
+ i32::default, fn() -> i32, ();
+ <i32>::default, fn() -> i32, ();
+ <i32 as Default>::default, fn() -> i32, ();
+
+ Rand::rand, fn(&mut DummyRng) -> i32, (&mut dummy_rng());
+ i32::rand, fn(&mut DummyRng) -> i32, (&mut dummy_rng());
+ <i32>::rand, fn(&mut DummyRng) -> i32, (&mut dummy_rng());
+ <i32 as Rand>::rand, fn(&mut DummyRng) -> i32, (&mut dummy_rng());
+ Rand::rand::<DummyRng>, fn(&mut DummyRng) -> i32, (&mut dummy_rng());
+ i32::rand::<DummyRng>, fn(&mut DummyRng) -> i32, (&mut dummy_rng());
+ <i32>::rand::<DummyRng>, fn(&mut DummyRng) -> i32, (&mut dummy_rng());
+ <i32 as Rand>::rand::<DummyRng>, fn(&mut DummyRng) -> i32, (&mut dummy_rng());
+
+ // Trait non-static methods.
+ Clone::clone, fn(&i32) -> i32, (&5);
+ i32::clone, fn(&i32) -> i32, (&5);
+ <i32>::clone, fn(&i32) -> i32, (&5);
+ <i32 as Clone>::clone, fn(&i32) -> i32, (&5);
+
+ FromIterator::from_iter, fn(OptionIter<i32>) -> Vec<i32>, (Some(5).into_iter());
+ Vec::from_iter, fn(OptionIter<i32>) -> Vec<i32>, (Some(5).into_iter());
+ <Vec<_>>::from_iter, fn(OptionIter<i32>) -> Vec<i32>, (Some(5).into_iter());
+ <Vec<_> as FromIterator<_>>::from_iter, fn(OptionIter<i32>) -> Vec<i32>,
+ (Some(5).into_iter());
+ <Vec<i32> as FromIterator<_>>::from_iter, fn(OptionIter<i32>) -> Vec<i32>,
+ (Some(5).into_iter());
+ FromIterator::from_iter::<OptionIter<i32>>, fn(OptionIter<i32>) -> Vec<i32>,
+ (Some(5).into_iter());
+ <Vec<i32> as FromIterator<_>>::from_iter::<OptionIter<i32>>, fn(OptionIter<i32>) -> Vec<i32>,
+ (Some(5).into_iter());
+
+ Add::add, fn(i32, i32) -> i32, (5, 6);
+ i32::add, fn(i32, i32) -> i32, (5, 6);
+ <i32>::add, fn(i32, i32) -> i32, (5, 6);
+ <i32 as Add<_>>::add, fn(i32, i32) -> i32, (5, 6);
+ <i32 as Add<i32>>::add, fn(i32, i32) -> i32, (5, 6);
+
+ String::into_cow, fn(String) -> Cow<'static, str>,
+ ("foo".to_string());
+ <String>::into_cow, fn(String) -> Cow<'static, str>,
+ ("foo".to_string());
+ <String as IntoCow<_>>::into_cow, fn(String) -> Cow<'static, str>,
+ ("foo".to_string());
+ <String as IntoCow<'static, _>>::into_cow, fn(String) -> Cow<'static, str>,
+ ("foo".to_string());
+}