-
Notifications
You must be signed in to change notification settings - Fork 13.4k
Self::EnumVariant not considered const fn #64247
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
Comments
Duplicate of #61456 (will close in a bit). @oli-obk It seems like folks open this issue because on stable, the error message does not point to the tracking issue, e.g. you don't see:
can we fix this? |
I think we should just stabilize it |
@oli-obk Is this diagnostics problem specific to this feature gate? I meant a more general fix to const-fn related gates. |
Not sure. I thought we're using the normal feature gate infra |
Reopening this to make sure we add a test per #61456 (comment). |
…entril Stabilize `const_constructor` # Stabilization proposal I propose that we stabilize `#![feature(const_constructor)]`. Tracking issue: #61456 Version target: 1.40 (2019-11-05 => beta, 2019-12-19 => stable). ## What is stabilized ### User guide Tuple struct and tuple variant constructors are now considered to be constant functions. As such a call expression where the callee has a tuple struct or variant constructor "function item" type can be called: ```rust const fn make_options() { // These already work because they are special cased: Some(0); (Option::Some)(1); // These also work now: let f = Option::Some; f(2); {Option::Some}(3); <Option<_>>::Some(5); } ``` ### Motivation Consistency with other `const fn`. Consistency between syntactic path forms. This should also ensure that constructors implement `const Fn` traits and can be coerced to `const fn` function pointers, if they are introduced. ## Tests * [ui/consts/const_constructor/const-construct-call.rs](https://github.com/rust-lang/rust/blob/0d75ab2293a106eb674ac01860910cfc1580837e/src/test/ui/consts/const_constructor/const-construct-call.rs) - Tests various syntactic forms, use in both `const fn` and `const` items, and constructors in both the current and extern crates. * [ui/consts/const_constructor/const_constructor_qpath.rs](https://github.com/rust-lang/rust/blob/1850dfcdabf8258a1f023f26c2c59e96b869dd95/src/test/ui/consts/const_constructor/const_constructor_qpath.rs) - Tests that type qualified paths to enum variants are also considered to be `const fn`.(#64247) r? @oli-obk Closes #61456 Closes #64247
Uh oh!
There was an error while loading. Please reload this page.
When using
Self
to create an enum variant in Rust 1.37+, we get an error:results in:
but if the enum is constructed explicitly, the compilation succeeds:
Looking at #53555, it looks like
Self::EnumVariant
should be considered aconst fn
withmin_const_fn
.Playground links for both variants: error, no-error
The text was updated successfully, but these errors were encountered: