I tried to use variable templates in the same way as I use some other templates, for example: we already know how to calculate the Fibonacci number or number using metaprogramming with template objects wrapping a static value or an enumeration value .
So, the first thing I did was try to specialize the template variable, and it works as expected:
template <std::size_t VALUE> std::size_t value = VALUE;
template <> std::size_t value<666u> = 1u;
std::cout << value<0u> << '\n';
std::cout << value<1u> << '\n';
std::cout << value<2u> << '\n';
std::cout << value<666u> << '\n';
Knowing that specialization of the variable template is possible, I tried to make the Fibonacci variable number:
template <std::size_t ITERATION>
std::size_t fibonacci = fibonacci<ITERATION - 1u> + fibonacci<ITERATION - 2u>;
template <> std::size_t fibonacci<1u> = 1u;
template <> std::size_t fibonacci<0u> = 0u;
int main()
{
std::cout << fibonacci<5> << '\n';
return 0;
}
Error received from Wandbox :
error: expected primary-expression before ';' token
template <std::size_t ITERATION> std::size_t fibonacci = fibonacci<ITERATION - 1u> + fibonacci<ITERATION - 2u>;
^
, , . , , , , , .
?
.