https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109142
--- Comment #4 from Xi Ruoyao <xry111 at gcc dot gnu.org> --- template <class T> using data_type = decltype([](){return 1;}()); template <class T> auto get_precision(T v) { auto tmp = *(data_type<T> *)&v; return tmp; } Clang and MSVC accept this with C++20, though I'm not sure if it's really valid (I'm not familiar with latest C++ spec development).