Closed
Description
When attempting to compile a program using const generic function pointers, I get the following linker error:
error: linking with `cc` failed: exit code: 1
|
= note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-L" "/root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/playground/target/debug/deps/playground-343407c725b154da.playground.9gij2ntw-cgu.0.rcgu.o" "-o" "/playground/target/debug/deps/playground-343407c725b154da" "/playground/target/debug/deps/playground-343407c725b154da.3lfkt68d9bwnd0w.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-nodefaultlibs" "-L" "/playground/target/debug/deps" "-L" "/playground/target/debug/build/backtrace-sys-0bad857f246b8d46/out" "-L" "/playground/target/debug/build/miniz-sys-cc52677d966ce23b/out" "-L" "/playground/target/debug/build/ring-3ec1d93b15dca95a/out" "-L" "/root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,--start-group" "-Wl,-Bstatic" "/root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-3155131507cc46c3.rlib" "/root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-d295083df0b8f9bc.rlib" "/root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace-ee721caa5e399a5b.rlib" "/root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace_sys-f522ac12e8b57785.rlib" "/root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-fde635d685e9d5b4.rlib" "/root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-400b98aa42a3327b.rlib" "/root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-8d4d01f94c0ba00e.rlib" "/root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-bbe52d74e07e8ddb.rlib" "/root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-7809a3c56dc793e3.rlib" "/root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-eb4f3199c7861934.rlib" "/root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-33ebcd88f3886c16.rlib" "/root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-a2ceb2a4c1b13237.rlib" "/root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-c19151a56f15ba15.rlib" "-Wl,--end-group" "/root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-0ce4526441314674.rlib" "-Wl,-Bdynamic" "-ldl" "-lrt" "-lpthread" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-lutil" "-lutil"
= note: /playground/target/debug/deps/playground-343407c725b154da.playground.9gij2ntw-cgu.0.rcgu.o: In function `playground::Wrapper<_>::call':
/playground/src/main.rs:11: undefined reference to `playground::hello_world'
collect2: error: ld returned 1 exit status
Source:
#![feature(const_generics)]
fn hello_world() {
println!("Hello, world!");
}
struct Wrapper<const F: fn() -> ()>;
impl<const F: fn() -> ()> Wrapper<{F}> {
fn call() {
F();
}
}
fn main() {
Wrapper::<{hello_world}>::call();
}
I'm not sure what the intended behavior should be here, but I was expecting to be able to call the function that I passed as a const generic parameter, which the compiler seems to accept as valid, but is failing during the linking step.