Skip to content

Commit 6d0d2d4

Browse files
committed
Constify Fn* traits
1 parent c9401db commit 6d0d2d4

File tree

1 file changed

+21
-13
lines changed

1 file changed

+21
-13
lines changed

core/src/ops/function.rs

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ use crate::marker::Tuple;
7272
)]
7373
#[fundamental] // so that regex can rely that `&str: !FnMut`
7474
#[must_use = "closures are lazy and do nothing unless called"]
75-
// FIXME(const_trait_impl) #[const_trait]
75+
#[const_trait]
76+
#[rustc_const_unstable(feature = "const_trait_impl", issue = "67792")]
7677
pub trait Fn<Args: Tuple>: FnMut<Args> {
7778
/// Performs the call operation.
7879
#[unstable(feature = "fn_traits", issue = "29625")]
@@ -159,7 +160,8 @@ pub trait Fn<Args: Tuple>: FnMut<Args> {
159160
)]
160161
#[fundamental] // so that regex can rely that `&str: !FnMut`
161162
#[must_use = "closures are lazy and do nothing unless called"]
162-
// FIXME(const_trait_impl) #[const_trait]
163+
#[const_trait]
164+
#[rustc_const_unstable(feature = "const_trait_impl", issue = "67792")]
163165
pub trait FnMut<Args: Tuple>: FnOnce<Args> {
164166
/// Performs the call operation.
165167
#[unstable(feature = "fn_traits", issue = "29625")]
@@ -238,7 +240,8 @@ pub trait FnMut<Args: Tuple>: FnOnce<Args> {
238240
)]
239241
#[fundamental] // so that regex can rely that `&str: !FnMut`
240242
#[must_use = "closures are lazy and do nothing unless called"]
241-
// FIXME(const_trait_impl) #[const_trait]
243+
#[const_trait]
244+
#[rustc_const_unstable(feature = "const_trait_impl", issue = "67792")]
242245
pub trait FnOnce<Args: Tuple> {
243246
/// The returned type after the call operator is used.
244247
#[lang = "fn_once_output"]
@@ -254,29 +257,32 @@ mod impls {
254257
use crate::marker::Tuple;
255258

256259
#[stable(feature = "rust1", since = "1.0.0")]
257-
impl<A: Tuple, F: ?Sized> Fn<A> for &F
260+
#[rustc_const_unstable(feature = "const_trait_impl", issue = "67792")]
261+
impl<A: Tuple, F: ?Sized> const Fn<A> for &F
258262
where
259-
F: Fn<A>,
263+
F: ~const Fn<A>,
260264
{
261265
extern "rust-call" fn call(&self, args: A) -> F::Output {
262266
(**self).call(args)
263267
}
264268
}
265269

266270
#[stable(feature = "rust1", since = "1.0.0")]
267-
impl<A: Tuple, F: ?Sized> FnMut<A> for &F
271+
#[rustc_const_unstable(feature = "const_trait_impl", issue = "67792")]
272+
impl<A: Tuple, F: ?Sized> const FnMut<A> for &F
268273
where
269-
F: Fn<A>,
274+
F: ~const Fn<A>,
270275
{
271276
extern "rust-call" fn call_mut(&mut self, args: A) -> F::Output {
272277
(**self).call(args)
273278
}
274279
}
275280

276281
#[stable(feature = "rust1", since = "1.0.0")]
277-
impl<A: Tuple, F: ?Sized> FnOnce<A> for &F
282+
#[rustc_const_unstable(feature = "const_trait_impl", issue = "67792")]
283+
impl<A: Tuple, F: ?Sized> const FnOnce<A> for &F
278284
where
279-
F: Fn<A>,
285+
F: ~const Fn<A>,
280286
{
281287
type Output = F::Output;
282288

@@ -286,19 +292,21 @@ mod impls {
286292
}
287293

288294
#[stable(feature = "rust1", since = "1.0.0")]
289-
impl<A: Tuple, F: ?Sized> FnMut<A> for &mut F
295+
#[rustc_const_unstable(feature = "const_trait_impl", issue = "67792")]
296+
impl<A: Tuple, F: ?Sized> const FnMut<A> for &mut F
290297
where
291-
F: FnMut<A>,
298+
F: ~const FnMut<A>,
292299
{
293300
extern "rust-call" fn call_mut(&mut self, args: A) -> F::Output {
294301
(*self).call_mut(args)
295302
}
296303
}
297304

298305
#[stable(feature = "rust1", since = "1.0.0")]
299-
impl<A: Tuple, F: ?Sized> FnOnce<A> for &mut F
306+
#[rustc_const_unstable(feature = "const_trait_impl", issue = "67792")]
307+
impl<A: Tuple, F: ?Sized> const FnOnce<A> for &mut F
300308
where
301-
F: FnMut<A>,
309+
F: ~const FnMut<A>,
302310
{
303311
type Output = F::Output;
304312
extern "rust-call" fn call_once(self, args: A) -> F::Output {

0 commit comments

Comments
 (0)