A implementação do GNU C ++ 11 de std::result_of
não contém o typedef type
para métodos que retornam void. Isso não está de acordo com a política SFINAE . Aqui está um substituto simples para o traço de tipo que funciona.
template<typename Expr>
class result_of;
template<typename F, typename... Args>
struct result_of<F(Args...)>
{
typedef decltype(std::declval<F>()(std::declval<Args>()...)) type;
};