/******************************************************************************
Online C++ Compiler.
Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <iostream>
using namespace std;
enum selector { SELECTOR1, SELECTOR2, SELECTOR3, };
// declaration
template < selector T> struct example_trait;
template<> struct example_trait<SELECTOR1> {
static constexpr size_t member_var = 3; };
template<> struct example_trait<SELECTOR2> {
static constexpr size_t member_var = 5; };
// pretend this is doing something useful but common
template < selector T, typename TT = example_trait<T> >
void function() { std::cout << TT::member_var << std::endl; }
int main()
{
function<SELECTOR1>();
function<SELECTOR2>();
return 0;
}