I can write void as a default template argument like this:
template<typename T = void>
class Foo {};
But I cannot declare a variable of type void like this: void foo; What kind of type is void if it can be supplied to templates but you can't declare void variables? What is the point of void as a default template argument if you can never use it for variables? Does it have any other uses?