diff --git a/_posts/2020-08-05-static-polymorphism.md b/_posts/2020-08-05-static-polymorphism.md index e014f25..0b72173 100644 --- a/_posts/2020-08-05-static-polymorphism.md +++ b/_posts/2020-08-05-static-polymorphism.md @@ -22,6 +22,13 @@ Same name and parameter signature, but return different types - `AsRef` `.as_iter()`, and the iterator `Item` type +# decltype and compiler-named types + +Rust has some types named by the compiler, but inaccessible in traits; can't return `impl SomeTrait` +from traits. Can return `impl Future` from free functions and structs, but traits can't use +compiler-generated types (associated types still need to name the type). C++ doesn't appear to have +the same restrictions. + # Require static methods on a class? Shouldn't be too hard - `T::some_method()` should be compilable. @@ -343,10 +350,3 @@ mostly please just use concepts. Worth acknowledging that C++ can do interesting things with `protected`, `friend`, and others, that Rust can't. However, Rust can limit trait implementations to current crate ("sealed traits"), where C++ concepts are purely duck typing. - -# decltype and compiler-named types - -Rust has some types named by the compiler, but inaccessible in traits; can't return `impl SomeTrait` -from traits. Can return `impl Future` from free functions and structs, but traits can't use -compiler-generated types (associated types still need to name the type). C++ doesn't appear to have -the same restrictions.