This code will be placed in a header file:

```
template<typename TTT>
inline Permutation<TTT> operator * (const Cycle<TTT>& cy, const Permutation<TTT>& p)
{
    return Permutation<TTT>(cy)*p;
}

```

Is `inline` necessary to avoid a linker error?

If this function is not a template and the header file is used in more than one .cpp file, `inline` is necessary to avoid a liker error complaining about multiple definitions for a function. It seems linker ignores this for templates.