{"action":"opened","issue":{"url":"https://api.github.com/repos/rust-lang/rust/issues/22706","labels_url":"https://api.github.com/repos/rust-lang/rust/issues/22706/labels{/name}","comments_url":"https://api.github.com/repos/rust-lang/rust/issues/22706/comments","events_url":"https://api.github.com/repos/rust-lang/rust/issues/22706/events","html_url":"https://github.com/rust-lang/rust/issues/22706","id":58566547,"number":22706,"title":"Type parameters checks are inconsistent and incomplete","user":{"login":"FlaPer87","id":13816,"avatar_url":"https://avatars.githubusercontent.com/u/13816?v=3","gravatar_id":"","url":"https://api.github.com/users/FlaPer87","html_url":"https://github.com/FlaPer87","followers_url":"https://api.github.com/users/FlaPer87/followers","following_url":"https://api.github.com/users/FlaPer87/following{/other_user}","gists_url":"https://api.github.com/users/FlaPer87/gists{/gist_id}","starred_url":"https://api.github.com/users/FlaPer87/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/FlaPer87/subscriptions","organizations_url":"https://api.github.com/users/FlaPer87/orgs","repos_url":"https://api.github.com/users/FlaPer87/repos","events_url":"https://api.github.com/users/FlaPer87/events{/privacy}","received_events_url":"https://api.github.com/users/FlaPer87/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/rust-lang/rust/labels/A-resolve","name":"A-resolve","color":"d7e102"},{"url":"https://api.github.com/repos/rust-lang/rust/labels/I-wrong","name":"I-wrong","color":"e10c02"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2015-02-23T10:15:31Z","updated_at":"2015-02-23T10:15:31Z","closed_at":null,"body":"The way we currently check type parameters is inconsistent and error prone. The code below compiles and it shouldn't.\r\n\r\nThe `resolve` phase currently ignores this checks and leaves them up to `typeck`, `collect` and `check`, which as demonstrated by bugs like this one and #20302 makes this check unsound. \r\n\r\n```rust\r\nfn is_copy<T: ::std::marker<i32>::Copy>() {}\r\n\r\nfn main() {}\r\n```"}}