https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85866
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- Reduced: template<typename _Tp, typename _Up = _Tp&&> _Up __declval(int); template<typename _Tp> _Tp __declval(long); template<typename _Tp> auto declval() noexcept -> decltype(__declval<_Tp>(0)); template<typename...> using void_t = void; template<typename U, typename V, void_t<decltype( (declval<U>().*declval<V>())() )>* = nullptr> void boom(){} struct Foo { void bar(){} }; int main() { boom<Foo, decltype(&Foo::bar)>(); }