decltype для разыменованого указателя на функцию
Является ли различное поведение компиляторов при разыменовании указателя на функцию багом или результатом неопределенности в стандарте? Или, возможно, это вообще "особенность" MSVC?
using foo_t = int();
foo_t& foo_ref(foo_t* f) { return *f; }
foo_t* foo_ptr(foo_t* f) { return f; }
using foo_ref_type = decltype( foo_ref( std::declval<foo_t*>() ));
using foo_ptr_type = decltype(*foo_ptr( std::declval<foo_t*>() ));
static_assert(std::is_same_v<foo_ref_type, foo_ptr_type>);
На GCC и Clang static_assert
проходит успешно (пробовал на godbolt и на QtCreator(mingw1120_64 gcc), а на MSVC фейлится (godbolt и VisualStudio 2022). Пробовал разные версии, стандарты.
https://godbolt.org/z/sE3bPPac5