Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Click here to view the latest version of this page.


template <class F>
struct function_traits
   static const std::size_t    arity = see-below;
   typedef see-below           result_type;
   typedef see-below           argN_type; 

The class template function_traits will only compile if:

[Tip] Tip

function_traits is intended to introspect only C++ functions of the form R (), R( A1 ), R ( A1, ... etc. ) and not function pointers or class member functions. To convert a function pointer type to a suitable type use remove_pointer.

Table 1.14. Function Traits Members




An integral constant expression that gives the number of arguments accepted by the function type F.


The type returned by function type F.


The Nth argument type of function type F, where 1 <= N <= arity of F.

Table 1.15. Examples



function_traits<void (void)>::arity

An integral constant expression that has the value 0.

function_traits<long (int)>::arity

An integral constant expression that has the value 1.

function_traits<long (int, long, double, void*)>::arity

An integral constant expression that has the value 4.

function_traits<void (void)>::result_type

The type void.

function_traits<long (int)>::result_type

The type long.

function_traits<long (int)>::arg1_type

The type int.

function_traits<long (int, long, double, void*)>::arg4_type

The type void*.

function_traits<long (int, long, double, void*)>::arg5_type

A compiler error: there is no arg5_type since there are only four arguments.

function_traits<long (*)(void)>::arity

A compiler error: argument type is a function pointer, and not a function type.