What are the techniques / c++ language facilities-features that provide compile time branching?
A first attempt to enumerate them (I'm expecting additions-corrections) :
Overload resolution : Eg picking the version of the "best" suits the provided arguments
void F(X& arg); void F(X&& arg);
Template specialization : Creating code that runs for "special arguments" - a technique crucial for template metaprogramming and compile time recursion
template<int N> struct A { /* implementation */ }; template<> struct A<0> { /* specific code */ };
SFINAE & expression sfinae : A special case of (1) that provides the tools for conditional interfaces.
template<class C, class F> auto test(C c, F f) -> decltype((c->*f)(), void()); // 'C' is pointer type