It's useful because you may be able to make compile-time decisions on the basis of the type of thread you're dealing with. What those are, I don't know.
As for instantiations, an astute library developer will be able to do the right thing. It's not that hard.
sqlite> select count(*) from <redacted>; 49862386
Curious what row count you expect in non-SQLite databases on a regular basis.