#include <iostream>

typedef double Func (double);

double add_one (double x)
{
    return x+1;
}
 
template <Func Instance>
struct test_type
{
    double operator() (double x)
    {
        return Instance (x);
    }
};
 
int main ()
{
    test_type<add_one> test;
   
    std::cout << test(10.0) << "\n";
   
    return 0;
}