// PR c++/5104
// Test that a function with a throw spec is a valid template argument.

#include <exception>

typedef void (*HandlerFunction)();
typedef HandlerFunction (*SetHandlerFunction)(HandlerFunction);

template <SetHandlerFunction set_function>
class HandlerStack {
public:
  static void defaultHandler();
};

typedef HandlerStack<std::set_terminate> Terminate;

template<> void Terminate::defaultHandler() {}
