I'd like to create a `form` class that, based on its template arguments, provides one `operator()` with one or more parameters. This is a prototype for curves, for example linear, bilinear, and so on.

So, if the form dimension is `n`, the operator should have `n` integer parameters, so linear forms with `formdim == 1` should have `operator()(i)` while `formdim == 2` I would like `operator()(i, j)`.

I thought `enable_if` could be of any help, but I am not really knee-deep into TMP, and I have a compile error:

```
template<unsigned int formdim>
class form
{
public:
    form()
    {}

    auto operator()(unsigned int j) -> typename std::enable_if<formdim == 1, unsigned int>::type
    {
        std::cout << "LINEAR" << std::endl;
        return 0;
    }

    // Here I get a compiler error due to the missing type
    auto operator()(unsigned int i, unsigned int j) -> typename std::enable_if<formdim == 2, double>::type
    {
        std::cout << "BILINEAR" << std::endl;
    }
};

```

How can I provide such a class? I don't need the number of parameters being *automatic*, I could manually add new operators as I need them... but obviously it would be very cool indeed.

Thanks for any help!