Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Able to use the turbofish syntax with impl trait for methods #50950

Closed
Thinkofname opened this issue May 21, 2018 · 5 comments
Closed

Able to use the turbofish syntax with impl trait for methods #50950

Thinkofname opened this issue May 21, 2018 · 5 comments
Assignees
Labels
A-impl-trait Area: `impl Trait`. Universally / existentially quantified anonymous types with static dispatch. C-bug Category: This is a bug. P-high High priority T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@Thinkofname
Copy link

In some cases it seems like you are able to use the turbofish syntax with impl Trait

use std::any::Any;
pub struct EventHandler {
}

impl EventHandler
{
    pub fn handle_event<T: Any>(&mut self, _efunc: impl FnMut(T)) {}
}

struct TestEvent(i32);

fn main() {
    let mut evt = EventHandler {};
    evt.handle_event::<TestEvent, fn(TestEvent)>(|_evt| {
    });
}

playground: http://play.rust-lang.org/?gist=62b8c9d317dd6f149354555ca42d45b3&version=stable&mode=debug

This should fail with error[E0632]: cannot provide explicit type parameters when `impl Trait` is used in argument position.

@kennytm kennytm added T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. A-impl-trait Area: `impl Trait`. Universally / existentially quantified anonymous types with static dispatch. C-bug Category: This is a bug. labels May 21, 2018
@kennytm
Copy link
Member

kennytm commented May 21, 2018

Note that the <T: Any> is irrelevant. E0632 seems to be ignoring functions in an impl methods.

struct X;
impl X {
    fn g(&self, _: impl Send) {}
}
fn main() {
    X.g::<u64>(0);
}

Edit: Calling with fully-qualified syntax X::g::<u64>(&X, 0) will trigger E0632.

@petrochenkov
Copy link
Contributor

E0632 seems to be ignoring functions in an impl methods.

This is great.
Now it remains to make it ignore non-methods.

@Restioson
Copy link

Yeah, this is a plus, actually.

@scottmcm
Copy link
Member

Hmm, is this one of the things that would be covered by rust-lang/rfcs#2405?

@nikomatsakis nikomatsakis added P-high High priority and removed I-nominated labels May 24, 2018
@nikomatsakis nikomatsakis changed the title Able to use the turbofish syntax with impl trait in some cases Able to use the turbofish syntax with impl trait for methods May 24, 2018
@nikomatsakis nikomatsakis self-assigned this May 24, 2018
@nikomatsakis
Copy link
Contributor

@scottmcm

Hmm, is this one of the things that would be covered by rust-lang/rfcs#2405?

certainly =)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-impl-trait Area: `impl Trait`. Universally / existentially quantified anonymous types with static dispatch. C-bug Category: This is a bug. P-high High priority T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests

7 participants