Skip to content

autodiff on generic functions fails #140032

@ZuseZ4

Description

@ZuseZ4

I tried this code:

#![feature(autodiff)] use std::autodiff::autodiff; #[autodiff(d_square, Reverse, Duplicated, Active)] fn square<T: std::ops::Mul<Output = T> + Copy>(x: &T) -> T { *x * *x } fn main() { let xf32: f32 = 3.0; let xf64: f64 = 3.0; let outputf32 = square::<f32>(&xf32); let outputf64 = square::<f64>(&xf64); assert_eq!(9.0, outputf32); assert_eq!(9.0, outputf64); let mut df_dxf32: f32 = 0.0; let mut df_dxf64: f64 = 0.0; let output_f32 = d_square::<f32>(&xf32, &mut df_dxf32, 1.0); let output_f64 = d_square::<f64>(&xf64, &mut df_dxf64, 1.0); assert_eq!(outputf32, output_f32); assert_eq!(outputf64, output_f64); assert_eq!(6.0, df_dxf32); assert_eq!(6.0, df_dxf64); }

I expected to see this happen: works.

Instead, this happened:

error[E0412]: cannot find type `T` in this scope --> src/main.rs:6:56 | 6 | fn square<T: std::ops::Mul<Output = T> + Copy>(x: &T) -> T { | ^ not found in this scope | help: you might be missing a type parameter | 1 | <T>#![feature(autodiff)] | +++

Meta

rustc --version --verbose:

build from source 
Backtrace

<backtrace> 

Solution: TBA

cc @haenoe

Metadata

Metadata

Assignees

Labels

C-bugCategory: This is a bug.E-mediumCall for participation: Medium difficulty. Experience needed to fix: Intermediate.F-autodiff`#![feature(autodiff)]`

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions