(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
debug/
pr70271.C
// { dg-do compile }

template <typename Function>
struct function_traits
: public function_traits<decltype(&Function::operator())> 
{ };

template <typename ClassType, typename ReturnType, typename... Args>
struct function_traits<ReturnType(ClassType::*)(Args...) const> 
{
  typedef ReturnType (*pointer)(Args...);
  typedef ReturnType return_type;
};

template <typename Function>
typename function_traits<Function>::pointer
FunctionPointer (const Function& lambda) 
{
  return static_cast<typename function_traits<Function>::pointer>(lambda);
}

template <typename Function>
typename function_traits<Function>::return_type
GetReturnValue (Function func) 
{
  typename function_traits<Function>::return_type *dummy;
  return *dummy;
}
template <typename T> class ClassFoo {};
template <typename T> void FuncBar () { }

template <> inline void FuncBar<double> ()
{
  typedef void (*func_type)(ClassFoo<double> &);
  func_type f1 = FunctionPointer ([](ClassFoo<double> & ref) { });
}