In the example on this page: https://en.cppreference.com/w/cpp/utility/variant there is an std::variant
with a single template parameter:
std::variant<std::string> x("abc");
Since a variant allows to store an object which can belong to a set of different classes, what is the purpose of the previous line? Should not it be the same as:
std::string x("abc");
Depends what you mean by "the same". Those two lines of code definitely don't have the same layout in memory, nor the same access pattern.
As to the reason for that to exist, well -- symmetry. If you're going to support a large number of template arguments, nothing's stopping you from also supporting one. In fact it can make the implementation easier if it went the recursive route (like C#'s value tuples). So just throw it in and let people use it if they want.