https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120990
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- This is expected. std::function<int()> is basically wrapping the function around like: ``` size_t bar(); int f() { return bar(); } ``` GCC does provide a warning with -Wconversion (though in the case of std::function only with -Wsystem-headers which turns on a lot of conversion warnings outside of std::function): /opt/compiler-explorer/arm64/gcc-trunk-20250707/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/include/c++/16.0.0/bits/invoke.h:116:42: warning: conversion from 'long unsigned int' to 'std::enable_if_t<true, int>' {aka 'int'} may change value [-Wconversion] 116 | return std::__invoke_impl<__type>(__tag{}, | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~ 117 | std::forward<_Callable>(__fn), | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 118 | std::forward<_Args>(__args)...); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~