Use macro to define function_traits and abstract_delegate.