...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
boost::proto::when<Grammar, Fun *> — A specialization that treats function pointer Transforms as if they were function type Transforms.
// In header: <boost/proto/transform/when.hpp> template<typename Grammar, typename Fun> struct when<Grammar, Fun *> : proto::when< Grammar, Fun > { };
This specialization requires that Fun
is actually a function type.
This specialization is required for nested transforms such as
proto::when<G, T0(T1(_))>
. In C++, functions that are used
as parameters to other functions automatically decay to funtion pointer types. In other words, the
type T0(T1(_))
is indistinguishable from
T0(T1(*)(_))
. This specialization is required to handle these
nested function pointer type transforms properly.