C++11: How to alias a function?
You can define a function alias (with some work) using perfect forwarding:
template <typename... Args>
auto g(Args&&... args) -> decltype(f(std::forward<Args>(args)...)) {
return f(std::forward<Args>(args)...);
}
This solution does apply even if f
is overloaded and/or a function template.
The constexpr
function pointer can be used as a function alias.
namespace bar
{
int f();
}
constexpr auto g = bar::f;
It is highly likely (but not guaranteed by the language) that using g
uses bar::f
directly.
Specifically, this depends on compiler version and optimization level.
In particular, this is the case for:
- GCC 4.7.1+, without optimization,
- Clang 3.1+, without optimization,
- MSVC 19.14+, with optimization.
See assembly generated by these compilers.
Classes are types, so they can be aliased with typedef
and using
(in C++11).
Functions are much more like objects, so there's no mechanism to alias them. At best you could use function pointers or function references:
void (*g)() = &bar::f;
void (&h)() = bar::f;
g();
h();
In the same vein, there's no mechanism for aliasing variables (short of through pointers or references).