Boost
C++ Libraries
...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
This version of Boost is under active development. You are currently in the develop branch. The current version is 1.90.0.
Boost.CallableTraits?
If you are not writing generic code, you should not use Boost.CallableTraits.
If you are writing generic code, take a moment to skim your header files, and see if you can find code that looks like this:
template<class Return, class First, class Second> class foo<Return(First, Second)> { // ^^^^^^^^^^^^^^^^^^^^^ };
Or maybe something like this:
template<class Return, class ...Args> class foo<Return(*)(Args...)> { // ^^^^^^^^^^^^^^^^^^ };
Or, if you are really unlucky, something like this:
template<class Return, class T, class ...Args> class foo<Return(T::*)(Args..., ...) const volatile & noexcept> { // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ };
With Boost.CallableTraits, you can get rid of all of these
template specializations (unless you deal with platform-specific calling conventions,
for now). Even if you are only specializing a simple function type like Return(Args...), Boost.CallableTraits
might be useful to you. You may find that Boost.CallableTraits
can help make your code more readable, more maintainable, more generic, and
less error-prone.
Boost.CallableTraits is well-tested on many platforms.
Boost.CallableTraits correctly handles many corner cases
that are often overlooked. The need for a proper library solution grows as
more features are added to C++.
Nope! Boost.CallableTraits doesn't have any dependencies,
so all you need are the Boost.CallableTraits headers.
Although arbitrary, the reference collapsing rules are well-defined and already
known to many C++ developers. Anything else would be a burden to memorize.
This also parallels the metafunctions provided in <type_traits>.
Yes. The SFINAE-ability of violated constraints has been tested extensively on supported compilers.
I originally implemented features for various platform-specific calling conventions. However, these features necessitated many more platform-specific test cases. The code is still designed to accommodate such features, so I would consider adding them in the future if there is any interest for these.