| #### Note: this error code is no longer emitted by the compiler. |
| |
| A method was called on a raw pointer whose inner type wasn't completely known. |
| |
| Erroneous code example: |
| |
| ```compile_fail,edition2018 |
| # #![deny(warnings)] |
| # fn main() { |
| let foo = &1; |
| let bar = foo as *const _; |
| if bar.is_null() { |
| // ... |
| } |
| # } |
| ``` |
| |
| Here, the type of `bar` isn't known; it could be a pointer to anything. Instead, |
| specify a type for the pointer (preferably something that makes sense for the |
| thing you're pointing to): |
| |
| ``` |
| let foo = &1; |
| let bar = foo as *const i32; |
| if bar.is_null() { |
| // ... |
| } |
| ``` |
| |
| Even though `is_null()` exists as a method on any raw pointer, Rust shows this |
| error because Rust allows for `self` to have arbitrary types (behind the |
| arbitrary_self_types feature flag). |
| |
| This means that someone can specify such a function: |
| |
| ```ignore (cannot-doctest-feature-doesnt-exist-yet) |
| impl Foo { |
| fn is_null(self: *const Self) -> bool { |
| // do something else |
| } |
| } |
| ``` |
| |
| and now when you call `.is_null()` on a raw pointer to `Foo`, there's ambiguity. |
| |
| Given that we don't know what type the pointer is, and there's potential |
| ambiguity for some types, we disallow calling methods on raw pointers when |
| the type is unknown. |