Is the variable `v` in the sample code below *odr-used*?

```
extern void* v;

template<void*&>
void f() {}

int main()
{
    f<v>();
}

```

I found this pattern in Boost ML.

cf. <http://lists.boost.org/Archives/boost/2011/04/180082.php>

It says that the `boost::enabler` is never defined, but **clang** rejects it as a linkage error if `-g` option is provided.

cf. <http://melpon.org/wandbox/permlink/nF45k7un3rFb175z>

The sample code above is reduced version of the Boost ML's code and **clang** rejects it too.

cf. <http://melpon.org/wandbox/permlink/ZwxaygXgUhbi1Cbr>

I think (but I am not sure) that template non-type arguments for reference type are *odr-used* even if they are not referred in their template body so the Boost ML's pattern is ill-formed.

Is my understanding correct?