// { dg-do assemble  }
template <class S, class T>
class mem_fun1_t {
public:
  mem_fun1_t(S (T::*pf)(double)) {} 
};
template <class T>
class mem_fun1_t<void, T> { 
public:
  mem_fun1_t(void (T::*pf)(double)) {}
};
struct Operation {
  double eval(double) { return 0; }
};
int main() {
  mem_fun1_t<double, Operation> m(&Operation::eval);
}